| C64 ROM | Routines |
| Prev: E8EA | Up: Map | Next: E9C8 |
|
Used by the routine at E716.
|
||||
| E965 | A6 D6 | LDX $D6 | get the cursor row | |
|
This entry point is used by the routine at E6B6.
|
||||
| E967 | E8 | INX | increment the row | |
| E968 | B5 D9 | LDA $D9,X | get the start of line X pointer high byte | |
| E96A | 10 FB | BPL $E967 | loop if not start of logical line | |
| E96C | 8E A5 02 | STX $02A5 | save the screen row marker | |
| E96F | E0 18 | CPX #$18 | compare it with the last line | |
| E971 | F0 0E | BEQ $E981 | if = last line go ?? | |
| E973 | 90 0C | BCC $E981 | if < last line go ?? | |
|
else it was > last line
|
||||
| E975 | 20 EA E8 | JSR $E8EA | scroll the screen | |
| E978 | AE A5 02 | LDX $02A5 | get the screen row marker | |
| E97B | CA | DEX | decrement the screen row marker | |
| E97C | C6 D6 | DEC $D6 | decrement the cursor row | |
| E97E | 4C DA E6 | JMP $E6DA | add this row to the current logical line and return | |
| E981 | A5 AC | LDA $AC | copy tape buffer pointer | |
| E983 | 48 | PHA | save it | |
| E984 | A5 AD | LDA $AD | copy tape buffer pointer | |
| E986 | 48 | PHA | save it | |
| E987 | A5 AE | LDA $AE | copy tape buffer end pointer | |
| E989 | 48 | PHA | save it | |
| E98A | A5 AF | LDA $AF | copy tape buffer end pointer | |
| E98C | 48 | PHA | save it | |
| E98D | A2 19 | LDX #$19 | set to end line + 1 for predecrement loop | |
| E98F | CA | DEX | decrement the line number | |
| E990 | 20 F0 E9 | JSR $E9F0 | fetch a screen address | |
| E993 | EC A5 02 | CPX $02A5 | compare it with the screen row marker | |
| E996 | 90 0E | BCC $E9A6 | if < screen row marker go ?? | |
| E998 | F0 0C | BEQ $E9A6 | if = screen row marker go ?? | |
| E99A | BD EF EC | LDA $ECEF,X | else get the start of the previous line low byte from the ROM table | |
| E99D | 85 AC | STA $AC | save previous line pointer low byte | |
| E99F | B5 D8 | LDA $D8,X | get the start of the previous line pointer high byte | |
| E9A1 | 20 C8 E9 | JSR $E9C8 | shift the screen line down | |
| E9A4 | 30 E9 | BMI $E98F | loop, branch always | |
| E9A6 | 20 FF E9 | JSR $E9FF | clear screen line X | |
| E9A9 | A2 17 | LDX #$17 | ||
| E9AB | EC A5 02 | CPX $02A5 | compare it with the screen row marker | |
| E9AE | 90 0F | BCC $E9BF | ||
| E9B0 | B5 DA | LDA $DA,X | ||
| E9B2 | 29 7F | AND #$7F | ||
| E9B4 | B4 D9 | LDY $D9,X | get start of line X pointer high byte | |
| E9B6 | 10 02 | BPL $E9BA | ||
| E9B8 | 09 80 | ORA #$80 | ||
| E9BA | 95 DA | STA $DA,X | ||
| E9BC | CA | DEX | ||
| E9BD | D0 EC | BNE $E9AB | ||
| E9BF | AE A5 02 | LDX $02A5 | get the screen row marker | |
| E9C2 | 20 DA E6 | JSR $E6DA | add this row to the current logical line | |
| E9C5 | 4C 58 E9 | JMP $E958 | restore the tape buffer pointers and exit | |
| Prev: E8EA | Up: Map | Next: E9C8 |