| Technician Ted | Routines |
| Prev: 8341 | Up: Map | Next: 83C3 |
|
Used by the routine at 8341.
|
||||||||||||
| 8375 | LD (IX+$00),L | Got a byte, so store it | ||||||||||
| 8378 | INC IX | Next address | ||||||||||
| 837A | DEC DE | Decrease length | ||||||||||
| 837B | LD B,$B2 | Timing constant | ||||||||||
|
This entry point is used by the routine at 8000. The timing constant is B1
|
||||||||||||
| 837D | LD L,$01 | Initialize L to build up a byte from tape | ||||||||||
| 837F | CALL $8341 | Get a bit from tape | ||||||||||
| 8382 | JP NC,$0000 | Reset on error | ||||||||||
| 8385 | LD A,$CB | Timing constant | ||||||||||
| 8387 | CP B | If an edge change was found quickly enough, reset the carry flag to denote "0" read. If not, set it to denote "1" read | ||||||||||
| 8388 | RLA | Put the read bit in bit 0 of A | ||||||||||
| 8389 | EXX | Save registers | ||||||||||
| 838A | LD B,A | Remember the saved bit | ||||||||||
| 838B | AND $01 | Store the next value to update in the animation buffers to 1 or 2 depending on what bit was read | ||||||||||
| 838D | INC A | |||||||||||
| 838E | LD C,A | |||||||||||
| 838F | LD DE,$806B | Point to animation queue | ||||||||||
| 8392 | LD A,(DE) | Is some animation required? | ||||||||||
| 8393 | AND A | |||||||||||
| 8394 | CALL NZ,$8277 | Do some if so | ||||||||||
| 8397 | RR B | Put the bit found in the carry flag | ||||||||||
| 8399 | EXX | Restore registers | ||||||||||
| 839A | RL L | Shift byte being read along ready for next bit | ||||||||||
| 839C | LD B,$B1 | Timing constant | ||||||||||
| 839E | JR NC,$837F | Loop back if there are still bits left | ||||||||||
| 83A0 | LD A,H | Get the parity byte and save it | ||||||||||
| 83A1 | XOR L | |||||||||||
| 83A2 | LD H,A | |||||||||||
| 83A3 | LD A,D | Reached the end of the block? | ||||||||||
| 83A4 | OR E | |||||||||||
| 83A5 | JR NZ,$8375 | No, more work to do | ||||||||||
|
At this point, the game has been read into memory. There are still some bits on the tape, so retrieve those to check everything is still in sync properly.
|
||||||||||||
| 83A7 | LD A,H | Test the parity byte | ||||||||||
| 83A8 | AND A | |||||||||||
| 83A9 | JP NZ,$0000 | Reset if it doesn't match | ||||||||||
| 83AC | LD DE,$EC2F | |||||||||||
| 83AF | LD B,$EB | Timing constant | ||||||||||
| 83B1 | CALL $8341 | Read a bit from tape | ||||||||||
| 83B4 | CP (HL) | |||||||||||
| 83B5 | NOP | |||||||||||
| 83B6 | INC D | |||||||||||
| 83B7 | LD A,$EA | Did we find an edge quickly enough? | ||||||||||
| 83B9 | CP B | |||||||||||
| 83BA | JP NC,$0000 | If so, something's gone wrong, so reset | ||||||||||
| 83BD | LD B,D | |||||||||||
| 83BE | DEC D | |||||||||||
| 83BF | DEC E | |||||||||||
| 83C0 | JP NZ,$83B1 | Loop back if there are more bytes to be read | ||||||||||
| Prev: 8341 | Up: Map | Next: 83C3 |