ProjectSPECCY icon

Spectrum Tape Header Reader

ProjectSPECCY | PRO | 10/21/17 02:36:16 PM UTC | 0 ⭐ | 4636 👁️ | Never ⏰ | []
Z80 Assembler |

0 B

|

None

|

0 👍

/

0 👎

;*** Spectrum Tape Header Reader ***
;by Steve Smith - www.ProjectSPECCY.com - V1.00 circa. 1991
;
;Pasmo 0.5.3 source
;
;Clear 25499, load code at 25500 and RANDOMIZE USR 25500
;to read tape header
;
 
 
ORG 25500
 
START:
PR_STRING:      EQU     8252    ;ROM Print a string routine
LD_BYTES:       EQU     1366    ;ROM Load data routine
 
BEGIN:  
        CALL    PRNTIT
        CALL    LDHEADR
        CALL    PRNFN
        LD      A,(HEADER)
        CP      0
        JP      Z,BASIC
        CP      1
        JP      Z,NUMARRAY
        CP      2
        JP      Z,STRARRAY
        CP      3
        JP      Z,CODE
UNNOWN:
        JP      UNKNOWN
LDHEADR:
        LD      DE,17
        LD      IX,HEADER
        XOR     A
        SCF
        CALL    LD_BYTES
        JP      NC,LDHEADR
        RET
HEADER:
        DS      17
PRNTIT:
        LD      A,2
        CALL    5633
        LD      DE,TITLE
        LD      BC,38
        CALL    PR_STRING
        RET
TITLE:
        DB      19,1,"****** TAPE HEADER READER ******",19,0,13,13
PRNFN:
        LD      DE,FILEMSG
        LD      BC,10
        CALL    PR_STRING
        LD      DE,HEADER+1
        LD      BC,10
        CALL    PR_STRING
        CALL    ENT2
        RET
FILEMSG:
        DB      "Filename:  "
BASIC:
        LD      DE,BASMSG
        LD      BC,9
        CALL    PR_STRING
        CALL    ENT2
        LD      DE,STMSG
        LD      BC,6
        CALL    PR_STRING
        LD      HL,(HEADER+13)
        CALL    PRNNUM
        CALL    ENT2
        LD      A,13
        RST     16
        LD      A,13
        RST     16
        LD      DE,PLENMSG
        LD      BC,16
        CALL    PR_STRING
        LD      HL,(HEADER+15)
        CALL    PRNNUM
        CALL    ENT2
        LD      DE,BLENMSG
        LD      BC,14
        CALL    PR_STRING
        LD      HL,(HEADER+11)
        CALL    PRNNUM
        CALL    ENT2
        RET
STMSG:
        DB      "Line:  "
PLENMSG:
        DB      "Program Length:  "
BLENMSG:
        DB      "Block Length:  "
BASMSG:
        DB      19,1,"BASIC", 19,0
NUMARRAY:
        LD      DE,NAMMSG
        LD      BC,17
        CALL    PR_STRING
        CALL    ENT2
        LD      DE,NMMSG
        LD      BC,12
        CALL    PR_STRING
        LD      A,(HEADER+14)
        SUB     32
        RST     16
        CALL    ENT2
        LD      DE,BLENMSG
        LD      BC,14
        CALL    PR_STRING
        LD      HL,(HEADER+11)
        CALL    PRNNUM
        CALL    ENT2
        RET
NAMMSG:
        DB      19,1,"Numeric Array",19,0
NMMSG:
        DB      "Array Name:  "
STRARRAY:
        LD      DE,STRMSG
        LD      BC,16
        CALL    PR_STRING
        CALL    ENT2
        LD      DE,STRGMSG
        LD      BC,12
        CALL    PR_STRING
        LD      A,(HEADER+14)
        SUB     128
        RST     16
        LD      A,"$"
        RST     16
        CALL    ENT2
        LD      DE,BLENMSG
        LD      BC,14
        CALL    PR_STRING
        LD      HL,(HEADER+11)
        CALL    PRNNUM
        CALL    ENT2
        RET
STRMSG:
        DB      19,0,"String Array",19,0
STRGMSG:
        DB      "Array Name:  "
CODE:
        LD      DE,CDMSG
        LD      BC,8
        CALL    PR_STRING
        CALL    ENT2
        LD      DE,CDSMSG
        LD      BC,7
        CALL    PR_STRING
        LD      HL,(HEADER+13)
        CALL    PRNNUM
        CALL    ENT2
        LD      DE,BLENMSG
        LD      BC,14
        CALL    PR_STRING
        LD      HL,(HEADER+11)
        CALL    PRNNUM
        CALL    ENT2
        RET
CDMSG:
        DB      19,1,"Code",19,0
CDSMSG:
        DB      "Start:  "
UNKNOWN:
        LD      DE,UKMSG
        LD      BC,11
        CALL    PR_STRING
        CALL    ENT2
        LD      DE,TPMSG
        LD      BC,6
        CALL    PR_STRING
        LD      A,(HEADER)
        LD      L,A
        LD      H,0
        CALL    PRNNUM
        CALL    ENT2
        RET
UKMSG:
        DB      19,1,"UNKNOWN",19,0
TPMSG:
        DB      "Type:  "
DIV10:
        LD      DE,0
        LD      BC,10
        XOR     A
DVLP:
        INC     DE
        SBC     HL,BC
        JR      NC,DVLP
        ADC     HL,BC
        DEC     DE
        DEC     HL
        EX      DE,HL
        LD      A,E
        RET
PRNNUM:                 ;Print 16-Bit Number
        XOR     A
        PUSH    AF
LOOP:
        CALL    DIV10
        ADD     A,"0"
        PUSH    AF
        LD      A,H
        OR      L
        JR      NZ,LOOP
LOOPB:
        POP     AF
        OR      A
        RET     Z
        RST     16
        JR      LOOPB
ENT2:
        LD      A,13
        RST     16
        LD      A,13
        RST     16
        RET
END     START

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎