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