Subroutines LOAD from tape

0401   19F3             ;
0402   19F3             ;       SUB TO READ BYTE FROM TAPE   
0403   19F3             ;
0404   19F3 20 24 1A    RDBYT   JSR   RDCHT                              
0405   19F6 20 00 1A            JSR   PACKT
0406   19F9 20 24 1A            JSR   RDCHT
0407   19FC 20 00 1A            JSR   PACKT
0408   19FF 60                  RTS
0409   1A00             ;
0410   1A00             ;       PACK A=ASCII INTO SAVX 
0411   1A00             ;       AS HEX DATA   
0412   1A00             ;
0413   1A00 C9 30       PACKT   CMP   #$30                                
0414   1A02 30 1E               BMI   PACKT3
0415   1A04 C9 47               CMP   #$47
0416   1A06 10 1A               BPL   PACKT3
0417   1A08 C9 40               CMP   #$40
0418   1A0A 30 03               BMI   PACKT1
0419   1A0C 18                  CLC   
0420   1A0D 69 09               ADC   #$09
0421   1A0F 2A          PACKT1  ROL   A
0422   1A10 2A                  ROL   A
0423   1A11 2A                  ROL   A
0424   1A12 2A                  ROL   A
0425   1A13 A0 04               LDY   #$04
0426   1A15 2A          PACKT2  ROL   A
0427   1A16 2E E9 17            ROL   SAVX
0428   1A19 88                  DEY   
0429   1A1A D0 F9               BNE   PACKT2
0430   1A1C AD E9 17            LDA   SAVX
0431   1A1F A0 00               LDY   #$00        ; Y=0 VALID HEX CHAR
0432   1A21 60                  RTS      ; Y=0 VALID HEX
0432   1A21 60          
0433   1A22 C8          PACKT3  INY               ; Y=1 NOT HEX
0434   1A23 60                  RTS
0435   1A24             ;
0436   1A24             ;        GET 1 CHAR FROM TAPE AND RETURN 
0437   1A24             ;        WITH CHAR IN A   USE SAVX+1 TO ASM CHAR   
0438   1A24             ; 
0439   1A24 8E EB 17    RDCHT   STX   SAVX+2                           
0440   1A27 A2 08               LDX   #$08        ; READ 8 BITS
0441   1A29 20 41 1A    RDCHT1  JSR   RDBIT       ; GET NEXT DATA BIT
0442   1A2C 4E EA 17            LSR   SAVX+1      ; RIGHT SHIFT CHAR
0443   1A2F 0D EA 17            ORA   SAVX+1      ; OR IN SIGN BIT
0444   1A32 8D EA 17            STA   SAVX+1      ; REPLACE CHAR
0445   1A35 CA                  DEX   
0446   1A36 D0 F1               BNE   RDCHT1
0447   1A38             ;
0448   1A38 AD EA 17            LDA   SAVX+1      ; MOVE CHAR INTO A
0449   1A3B 2A                  ROL   A           ; SHIFT OFF PARITY
0450   1A3C 4A                  LSR   A
0451   1A3D AE EB 17            LDX   SAVX+2
0452   1A40 60                  RTS
0453   1A41             ;		
0454   1A41             ;          THIS SUB GETS ONE BIT FROM TAPE AND
0455   1A41             ;          RETURNS IT IN SIGN OF A    
0456   1A41             ;
0457   1A41 2C 42 17    RDBIT   BIT   SBD         ; WAIT FOR END OF START BIT
0458   1A44 10 FB               BPL   RDBIT
0459   1A46 AD 46 17            LDA   CLKRDT      ; GET START BIT TIME
0460   1A49 A0 FF               LDY   #$FF        ; A=256-T1
0461   1A4B 8C 46 17            STY   CLK64T      ; SET UP TIMER
0462   1A4E             ;		
0463   1A4E A0 14               LDY   #$14
0464   1A50 88          RDBIT3  DEY               ; DELAY 100 MICRO SEC
0465   1A51 D0 FD               BNE   RDBIT3
0466   1A53             ;
0467   1A53 2C 42 17    RDBIT2  BIT   SBD
0468   1A56 30 FB               BMI   RDBIT2      ; WAIT FOR NEXT START BIT
0469   1A58             ; 
0470   1A58 38                  SEC   
0471   1A59 ED 46 17            SBC   CLKRDT      ; (256-T1)-(256-T2)=T2-T1
0472   1A5C A0 FF               LDY   #$FF
0473   1A5E 8C 46 17            STY   CLK64T      ; SET UP TIMER FOR NEXT BIT
0474   1A61             ;
0475   1A61 A0 07               LDY   #$07
0476   1A63 88          RDBIT4  DEY               ; DELAY 50 MICROSEC
0477   1A64 D0 FD               BNE   RDBIT4
0478   1A66             ;
0479   1A66 49 FF               EOR   #$FF        ; COMPLEMENT SIGN OF A
0480   1A68 29 80               AND   #$80        ; MASK ALL EXCEPT SIGN
0481   1A6A 60                  RTS