;*** 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