ProjectSPECCY

Spectrum Tape Header Reader

Oct 21st, 2017
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;*** Spectrum Tape Header Reader ***
  2. ;by Steve Smith - www.ProjectSPECCY.com - V1.00 circa. 1991
  3. ;
  4. ;Pasmo 0.5.3 source
  5. ;
  6. ;Clear 25499, load code at 25500 and RANDOMIZE USR 25500
  7. ;to read tape header
  8. ;
  9.  
  10.  
  11. ORG 25500
  12.  
  13. START:
  14. PR_STRING:      EQU     8252    ;ROM Print a string routine
  15. LD_BYTES:       EQU     1366    ;ROM Load data routine
  16.  
  17. BEGIN: 
  18.         CALL    PRNTIT
  19.         CALL    LDHEADR
  20.         CALL    PRNFN
  21.         LD      A,(HEADER)
  22.         CP      0
  23.         JP      Z,BASIC
  24.         CP      1
  25.         JP      Z,NUMARRAY
  26.         CP      2
  27.         JP      Z,STRARRAY
  28.         CP      3
  29.         JP      Z,CODE
  30. UNNOWN:
  31.         JP      UNKNOWN
  32. LDHEADR:
  33.         LD      DE,17
  34.         LD      IX,HEADER
  35.         XOR     A
  36.         SCF
  37.         CALL    LD_BYTES
  38.         JP      NC,LDHEADR
  39.         RET
  40. HEADER:
  41.         DS      17
  42. PRNTIT:
  43.         LD      A,2
  44.         CALL    5633
  45.         LD      DE,TITLE
  46.         LD      BC,38
  47.         CALL    PR_STRING
  48.         RET
  49. TITLE:
  50.         DB      19,1,"****** TAPE HEADER READER ******",19,0,13,13
  51. PRNFN:
  52.         LD      DE,FILEMSG
  53.         LD      BC,10
  54.         CALL    PR_STRING
  55.         LD      DE,HEADER+1
  56.         LD      BC,10
  57.         CALL    PR_STRING
  58.         CALL    ENT2
  59.         RET
  60. FILEMSG:
  61.         DB      "Filename:  "
  62. BASIC:
  63.         LD      DE,BASMSG
  64.         LD      BC,9
  65.         CALL    PR_STRING
  66.         CALL    ENT2
  67.         LD      DE,STMSG
  68.         LD      BC,6
  69.         CALL    PR_STRING
  70.         LD      HL,(HEADER+13)
  71.         CALL    PRNNUM
  72.         CALL    ENT2
  73.         LD      A,13
  74.         RST     16
  75.         LD      A,13
  76.         RST     16
  77.         LD      DE,PLENMSG
  78.         LD      BC,16
  79.         CALL    PR_STRING
  80.         LD      HL,(HEADER+15)
  81.         CALL    PRNNUM
  82.         CALL    ENT2
  83.         LD      DE,BLENMSG
  84.         LD      BC,14
  85.         CALL    PR_STRING
  86.         LD      HL,(HEADER+11)
  87.         CALL    PRNNUM
  88.         CALL    ENT2
  89.         RET
  90. STMSG:
  91.         DB      "Line:  "
  92. PLENMSG:
  93.         DB      "Program Length:  "
  94. BLENMSG:
  95.         DB      "Block Length:  "
  96. BASMSG:
  97.         DB      19,1,"BASIC", 19,0
  98. NUMARRAY:
  99.         LD      DE,NAMMSG
  100.         LD      BC,17
  101.         CALL    PR_STRING
  102.         CALL    ENT2
  103.         LD      DE,NMMSG
  104.         LD      BC,12
  105.         CALL    PR_STRING
  106.         LD      A,(HEADER+14)
  107.         SUB     32
  108.         RST     16
  109.         CALL    ENT2
  110.         LD      DE,BLENMSG
  111.         LD      BC,14
  112.         CALL    PR_STRING
  113.         LD      HL,(HEADER+11)
  114.         CALL    PRNNUM
  115.         CALL    ENT2
  116.         RET
  117. NAMMSG:
  118.         DB      19,1,"Numeric Array",19,0
  119. NMMSG:
  120.         DB      "Array Name:  "
  121. STRARRAY:
  122.         LD      DE,STRMSG
  123.         LD      BC,16
  124.         CALL    PR_STRING
  125.         CALL    ENT2
  126.         LD      DE,STRGMSG
  127.         LD      BC,12
  128.         CALL    PR_STRING
  129.         LD      A,(HEADER+14)
  130.         SUB     128
  131.         RST     16
  132.         LD      A,"$"
  133.         RST     16
  134.         CALL    ENT2
  135.         LD      DE,BLENMSG
  136.         LD      BC,14
  137.         CALL    PR_STRING
  138.         LD      HL,(HEADER+11)
  139.         CALL    PRNNUM
  140.         CALL    ENT2
  141.         RET
  142. STRMSG:
  143.         DB      19,0,"String Array",19,0
  144. STRGMSG:
  145.         DB      "Array Name:  "
  146. CODE:
  147.         LD      DE,CDMSG
  148.         LD      BC,8
  149.         CALL    PR_STRING
  150.         CALL    ENT2
  151.         LD      DE,CDSMSG
  152.         LD      BC,7
  153.         CALL    PR_STRING
  154.         LD      HL,(HEADER+13)
  155.         CALL    PRNNUM
  156.         CALL    ENT2
  157.         LD      DE,BLENMSG
  158.         LD      BC,14
  159.         CALL    PR_STRING
  160.         LD      HL,(HEADER+11)
  161.         CALL    PRNNUM
  162.         CALL    ENT2
  163.         RET
  164. CDMSG:
  165.         DB      19,1,"Code",19,0
  166. CDSMSG:
  167.         DB      "Start:  "
  168. UNKNOWN:
  169.         LD      DE,UKMSG
  170.         LD      BC,11
  171.         CALL    PR_STRING
  172.         CALL    ENT2
  173.         LD      DE,TPMSG
  174.         LD      BC,6
  175.         CALL    PR_STRING
  176.         LD      A,(HEADER)
  177.         LD      L,A
  178.         LD      H,0
  179.         CALL    PRNNUM
  180.         CALL    ENT2
  181.         RET
  182. UKMSG:
  183.         DB      19,1,"UNKNOWN",19,0
  184. TPMSG:
  185.         DB      "Type:  "
  186. DIV10:
  187.         LD      DE,0
  188.         LD      BC,10
  189.         XOR     A
  190. DVLP:
  191.         INC     DE
  192.         SBC     HL,BC
  193.         JR      NC,DVLP
  194.         ADC     HL,BC
  195.         DEC     DE
  196.         DEC     HL
  197.         EX      DE,HL
  198.         LD      A,E
  199.         RET
  200. PRNNUM:                 ;Print 16-Bit Number
  201.         XOR     A
  202.         PUSH    AF
  203. LOOP:
  204.         CALL    DIV10
  205.         ADD     A,"0"
  206.         PUSH    AF
  207.         LD      A,H
  208.         OR      L
  209.         JR      NZ,LOOP
  210. LOOPB:
  211.         POP     AF
  212.         OR      A
  213.         RET     Z
  214.         RST     16
  215.         JR      LOOPB
  216. ENT2:
  217.         LD      A,13
  218.         RST     16
  219.         LD      A,13
  220.         RST     16
  221.         RET
  222. END     START
Advertisement