1 2 ; LST OFF 3 ORG $0800 4 5 ******************************** 6 * * 7 * Pseudo Boot1 * 8 * (c)29/01/2009 by Deckard * 9 * * 10 ******************************** 11 12 PTR_MSG EQU $06 ; and $07 message pointer (current) 13 PTR_REF EQU $08 ; and $09 message pointer (reference) 14 WNDLFT EQU $20 ; left margin 40c txt screen 15 WNDWDTH EQU $21 ; width 16 WNDTOP EQU $22 ; top margin 17 WNDBTM EQU $23 ; bottom margin 18 CH EQU $24 ; X cursor 19 CV EQU $25 ; Y cursor 20 PCL EQU $3A ; save PC 21 PCH EQU $3B 22 FIRST EQU $EC ; 1st loop 23 24 KEY EQU $C000 25 STROBE EQU $C010 26 27 ROM_MON EQU $F800 28 INIT EQU $FB2F 29 VTAB EQU $FC22 30 HOME EQU $FC58 31 CROUT EQU $FD8E 32 LIST2 EQU $FE63 ; disassemble (acc) instruction 33 SETKBD EQU $FE89 34 SETVID EQU $FE93 35 MONZ EQU $FF69 36 37 ******************************** 38 0800: 02 39 DFB 2 ; 2 sectors of 256 bytes 40 41 * Init 40c txt screen 42 0801: 20 89 FE 43 JSR SETKBD 0804: 20 93 FE 44 JSR SETVID 0807: 20 2F FB 45 JSR INIT 46 080A: 20 58 FC 47 JSR HOME 080D: A9 01 48 LDA #1 080F: 85 20 49 STA WNDLFT 0811: 85 22 50 STA WNDTOP 0813: A9 26 51 LDA #38 0815: 85 21 52 STA WNDWDTH 0817: A9 17 53 LDA #23 0819: 85 23 54 STA WNDBTM 081B: A9 01 55 LDA #1 081D: 85 24 56 STA CH 081F: 85 25 57 STA CV 0821: 20 22 FC 58 JSR VTAB 0824: 20 8E FD 59 JSR CROUT 60 61 * Init string pointers 62 0827: A9 19 63 LDA #MY_TXT 082F: 85 07 67 STA PTR_MSG+1 0831: 85 09 68 STA PTR_REF+1 0833: A9 01 69 LDA #1 0835: 85 EC 70 STA FIRST 71 72 * Horizontal line (top) 73 0837: A9 00 74 SCROLL LDA #0 0839: 8D F0 08 75 STA SCRN_X 083C: 8D F1 08 76 STA SCRN_Y 77 083F: A0 00 78 :1 LDY #0 0841: B1 06 79 LDA (PTR_MSG),Y 0843: AC F1 08 80 LDY SCRN_Y 0846: AE F0 08 81 LDX SCRN_X 0849: 20 07 09 82 JSR WRITE_LETTER 084C: 20 F2 08 83 JSR NEXT_CHAR 84 084F: EE F0 08 85 INC SCRN_X 0852: AD F0 08 86 LDA SCRN_X 0855: C9 28 87 CMP #40 0857: D0 E6 88 BNE :1 89 90 * Vertical line (right) 91 0859: CE F0 08 92 DEC SCRN_X 085C: EE F1 08 93 INC SCRN_Y 94 085F: A0 00 95 :2 LDY #0 0861: B1 06 96 LDA (PTR_MSG),Y 0863: AC F1 08 97 LDY SCRN_Y 0866: AE F0 08 98 LDX SCRN_X 0869: 20 07 09 99 JSR WRITE_LETTER 086C: 20 F2 08 100 JSR NEXT_CHAR 101 086F: EE F1 08 102 INC SCRN_Y 0872: AD F1 08 103 LDA SCRN_Y 0875: C9 18 104 CMP #24 0877: D0 E6 105 BNE :2 106 107 * Horizontal line (down) 108 0879: CE F1 08 109 DEC SCRN_Y 087C: CE F0 08 110 DEC SCRN_X 111 087F: A0 00 112 :3 LDY #0 0881: B1 06 113 LDA (PTR_MSG),Y 0883: AC F1 08 114 LDY SCRN_Y 0886: AE F0 08 115 LDX SCRN_X 0889: 20 07 09 116 JSR WRITE_LETTER 088C: 20 F2 08 117 JSR NEXT_CHAR 118 088F: CE F0 08 119 DEC SCRN_X 0892: 10 EB 120 BPL :3 121 122 * Vertical line (left) 123 0894: EE F0 08 124 INC SCRN_X 0897: CE F1 08 125 DEC SCRN_Y 126 089A: A0 00 127 :4 LDY #0 089C: B1 06 128 LDA (PTR_MSG),Y 089E: AC F1 08 129 LDY SCRN_Y 08A1: AE F0 08 130 LDX SCRN_X 08A4: 20 07 09 131 JSR WRITE_LETTER 08A7: 20 F2 08 132 JSR NEXT_CHAR 133 08AA: CE F1 08 134 DEC SCRN_Y 08AD: D0 EB 135 BNE :4 136 137 * New reference 138 08AF: A5 08 139 LDA PTR_REF 08B1: 85 06 140 STA PTR_MSG 08B3: A5 09 141 LDA PTR_REF+1 08B5: 85 07 142 STA PTR_MSG+1 08B7: 20 F2 08 143 JSR NEXT_CHAR 144 08BA: A5 06 145 LDA PTR_MSG 08BC: 85 08 146 STA PTR_REF 08BE: A5 07 147 LDA PTR_MSG+1 08C0: 85 09 148 STA PTR_REF+1 149 150 * Check end 151 08C2: AD 00 C0 152 LDA KEY 08C5: C9 9B 153 CMP #$9B ; esc? 08C7: D0 06 154 BNE :7 155 08C9: 2C 10 C0 156 BIT STROBE 08CC: 4C 69 FF 157 JMP MONZ ; end 158 159 160 * Additional scroll: the rom monitor! 161 08CF: 2C 10 C0 162 :7 BIT STROBE 163 08D2: A5 EC 164 LDA FIRST ; init address of start? 08D4: F0 0A 165 BEQ :5 ; no 166 08D6: C6 EC 167 DEC FIRST 168 08D8: A9 00 169 LDA #L 08DA: 85 3A 170 STA PCL 08DC: A9 F8 171 LDA #>ROM_MON 08DE: 85 3B 172 STA PCH 173 08E0: A2 00 174 :5 LDX #0 ; disassemble 2 instructions of the rom monitor 08E2: A9 02 175 LDA #2 08E4: 20 63 FE 176 JSR LIST2 177 08E7: A5 3B 178 LDA PCH ; after $FFFF? 08E9: D0 02 179 BNE :6 ; no 180 08EB: E6 EC 181 INC FIRST ; return to $F800 182 08ED: 4C 37 08 183 :6 JMP SCROLL 184 185 *------------------------------- 186 * Position on the screen 187 *------------------------------- 188 08F0: 00 189 SCRN_X DFB 0 08F1: 00 190 SCRN_Y DFB 0 191 192 193 *------------------------------- 194 * Pointer for next character 195 *------------------------------- 196 197 NEXT_CHAR 08F2: E6 06 198 INC PTR_MSG 08F4: D0 02 199 BNE :1 200 08F6: E6 07 201 INC PTR_MSG+1 202 08F8: A0 00 203 :1 LDY #0 08FA: B1 06 204 LDA (PTR_MSG),Y 08FC: D0 08 205 BNE :2 206 08FE: A9 19 207 LDA #MY_TXT 0904: 85 07 210 STA PTR_MSG+1 211 0906: 60 212 :2 RTS 213 214 215 *------------------------------- 216 * Write a letter on the screen 217 *------------------------------- 218 219 * In : Acc = letter 220 * X = column # [0,39] 221 * Y = line # [0,23] 222 223 WRITE_LETTER 224 0907: 48 225 PHA 226 0908: B9 96 09 227 LDA SCREENH,Y ; screen address 090B: 8D 17 09 228 STA STA_SCRN+2 090E: B9 AE 09 229 LDA SCREENL,Y 0911: 8D 16 09 230 STA STA_SCRN+1 231 0914: 68 232 PLA 0915: 9D FF FF 233 STA_SCRN STA $FFFF,X ; write it 0918: 60 234 RTS 235 236 237 *------------------------------- 238 * Message 239 *------------------------------- 240 0919: 10 13 05 241 MY_TXT INV "PSEUDODISK II BY ALEX FREED" 091C: 15 04 0F 04 0920: 09 13 0B 20 0924: 09 09 20 02 0928: 19 20 01 0C 092C: 05 18 20 06 0930: 12 05 05 04 0934: 20 2D 20 242 INV " - " 0937: 12 0F 0D 243 INV "ROM VERSION BY VLADITX" 093A: 20 16 05 12 093E: 13 09 0F 0E 0942: 20 02 19 20 0946: 16 0C 01 04 094A: 09 14 18 094D: 20 2D 20 244 INV " - " 0950: 02 05 01 245 INV "BEAUTIFUL BOOT FOR PD8 BY " 0953: 15 14 09 06 0957: 15 0C 20 02 095B: 0F 0F 14 20 095F: 06 0F 12 20 0963: 10 04 38 20 0967: 02 19 20 096A: 0D 09 0E 246 INV "MINI APPLER FROM MPG AND DECKARD" 096D: 09 20 01 10 0971: 10 0C 05 12 0975: 20 06 12 0F 0979: 0D 20 0D 10 097D: 07 20 01 0E 0981: 04 20 04 05 0985: 03 0B 01 12 0989: 04 098A: 20 20 20 247 INV " " 098D: 20 20 20 20 0991: 20 20 20 20 0995: 00 248 DFB 0 249 250 251 *------------------------------- 252 * Address of the screen 253 *------------------------------- 254 0996: 04 04 05 255 SCREENH HEX 0404050506060707 0999: 05 06 06 07 099D: 07 099E: 04 04 05 256 HEX 0404050506060707 09A1: 05 06 06 07 09A5: 07 09A6: 04 04 05 257 HEX 0404050506060707 09A9: 05 06 06 07 09AD: 07 258 09AE: 00 80 00 259 SCREENL HEX 0080008000800080 09B1: 80 00 80 00 09B5: 80 09B6: 28 A8 28 260 HEX 28A828A828A828A8 09B9: A8 28 A8 28 09BD: A8 09BE: 50 D0 50 261 HEX 50D050D050D050D0 09C1: D0 50 D0 50 09C5: D0 262 09C6: 00 00 00 263 DS \,0 09C9: 00 00 00 00 09CD: 00 00 00 00 09D1: 00 00 00 00 09D5: 00 00 00 00 09D9: 00 00 00 00 09DD: 00 00 00 00 09E1: 00 00 00 00 09E5: 00 00 00 00 09E9: 00 00 00 00 09ED: 00 00 00 00 09F1: 00 00 00 00 09F5: 00 00 00 00 09F9: 00 00 00 00 09FD: 00 00 00 264 265 SAV PSEUDO.BOOT1 Object saved as PSEUDO.BOOT1,A$0800,L$0200,BIN --End assembly, 512 bytes, Errors: 0 Symbol table - alphabetical order: CH =$24 CROUT =$FD8E CV =$25 FIRST =$EC HOME =$FC58 INIT =$FB2F KEY =$C000 LIST2 =$FE63 MONZ =$FF69 MY_TXT =$0919 NEXT_CHAR=$08F2 PCH =$3B PCL =$3A PTR_MSG =$06 PTR_REF =$08 ROM_MON =$F800 SCREENH =$0996 SCREENL =$09AE SCRN_X =$08F0 SCRN_Y =$08F1 SCROLL =$0837 SETKBD =$FE89 SETVID =$FE93 STA_SCRN=$0915 STROBE =$C010 VTAB =$FC22 WNDBTM =$23 WNDLFT =$20 WNDTOP =$22 WNDWDTH =$21 WRITE_LETTER=$0907 Symbol table - numerical order: PTR_MSG =$06 PTR_REF =$08 WNDLFT =$20 WNDWDTH =$21 WNDTOP =$22 WNDBTM =$23 CH =$24 CV =$25 PCL =$3A PCH =$3B FIRST =$EC SCROLL =$0837 SCRN_X =$08F0 SCRN_Y =$08F1 NEXT_CHAR=$08F2 WRITE_LETTER=$0907 STA_SCRN=$0915 MY_TXT =$0919 SCREENH =$0996 SCREENL =$09AE KEY =$C000 STROBE =$C010 ROM_MON =$F800 INIT =$FB2F VTAB =$FC22 HOME =$FC58 CROUT =$FD8E LIST2 =$FE63 SETKBD =$FE89 SETVID =$FE93 MONZ =$FF69