0000- 5 0000- 6 ; ***************************************************************************** 0000- 7 ; Loads at 0x0400 and 0F3F and 0BCC, Executes at 0x0400 0000- 8 ; ***************************************************************************** 0000- 9 0000- 10 ;Game Constants 0051- 11 PROM .EQ 0x0051 010B- 12 CROM .EQ 0x010B ; Address of character ROM in SCIOSv3 0185- 13 MK14_KEYS .EQ 0x0185 ; Address of keyboard and display routine in SCIOSv3 0200- 14 DISP_GR .EQ 0x0200 ; Start of VDU frame store for graphics 01FE- 15 DISP_CARDS .EQ 0x01FE ; Start of VDU frame store for Cards graphics 0000- 16 0400- 17 PROG1 .EQ 0x0400 ;Start of program memory 0F3F- 18 PROG2 .EQ 0x0F3F ;Program sub routines 0BCC- 19 PROG3 .EQ 0x0BCC ;Program sub routines 0000- 20 0880- 21 VAR_0880 .EQ 0x0880 ;Ascii value of cards 088E- 22 VAR_088E .EQ 0x088E ;Card Suits 0892- 23 VAR_0892 .EQ 0x0892 ;Initial values of Foundation 0896- 24 VAR_0896 .EQ 0x0896 ;Pack of Cards 08CB- 25 VAR_08CB .EQ 0x08CB ;52 Random Numbers Store 0000- 26 0D00- 27 KBD_DISP .EQ 0x0D00 ;MK14 Keyboard and display hardware address decode 0000- 28 0B00- 29 VAR_0B00 .EQ 0x0B00 ;Column storage pointers 0B10- 30 VAR_0B10 .EQ 0x0B10 ;Column storage 0BB4- 31 VAR_0BB4 .EQ 0x0BB4 ;Foundation Variables 0BBC- 32 VAR_SWAP .EQ 0x0BBC ;Swap Area 0000- 33 0F00- 34 VAR_0F00 .EQ 0x0F00 ;Variables storage area 0F40- 35 VAR_0F40 .EQ 0x0F40 ;Program sub routines 0000- 36 0000- 37 0000- 38 ; Variables 0F00- 39 .OR VAR_0F00 0F00- 40 0F00- 41 0008- 42 DISPLAY_0 .EQ 0x08 0007- 43 DISPLAY_1 .EQ 0x07 0006- 44 DISPLAY_2 .EQ 0x06 0005- 45 DISPLAY_3 .EQ 0x05 0004- 46 DISPLAY_4 .EQ 0x04 0002- 47 DISPLAY_5 .EQ 0x02 0001- 48 DISPLAY_6 .EQ 0x01 0000- 49 DISPLAY_7 .EQ 0x00 0F00- 50 001D- 51 COL_POS .EQ 0x1D 001E- 52 DISP_H .EQ 0x1E ;Could reuse PRNG_H 001F- 53 DISP_L .EQ 0x1F ;Could reuse PRNG_L 0020- 54 TEMP .EQ 0x20 ;Used in Loops as counter 0021- 55 COUNT .EQ 0x21 0022- 56 PACK_COUNT .EQ 0x22 0023- 57 MOVE_COUNT .EQ 0x23 0024- 58 VALID .EQ 0x24 ;Valid Move 0025- 59 CARD .EQ 0x25 0026- 60 CARDNUM .EQ 0x26 ;Card Number 1 to 52 0027- 61 C_SUIT .EQ 0x27 ;Card Suit 0028- 62 C_NUM .EQ 0x28 ;Card Number 1 to 13 0029- 63 C_HIDE .EQ 0x29 002A- 64 C_N_ASC .EQ 0x2A ;Asc value for card number 002B- 65 C_S_ASC .EQ 0x2B ;Asc value for card suit 002C- 66 PRNG_L .EQ 0x2C ;Low byte of pseudo random number generator 002D- 67 PRNG_H .EQ 0x2D ;High byte of pseudo random number generator 002E- 68 PRNG_T .EQ 0x2E ;Temp result for pseudo random number generator 002F- 69 COL .EQ 0x2F 0030- 70 COL_1 .EQ 0x30 0031- 71 COL_8 .EQ 0x31 0032- 72 ROW .EQ 0x32 0033- 73 KEYPRESS .EQ 0x33 0034- 74 KEYPRESS_1 .EQ 0x34 0035- 75 KEYPRESS_2 .EQ 0x35 0036- 76 FOUNDATION .EQ 0x36 0037- 77 FOUNDATION1 .EQ 0x37 0038- 78 FOUNDATION2 .EQ 0x38 0039- 79 CARD1_VAL .EQ 0x39 003A- 80 CARD2_VAL .EQ 0x3A 003B- 81 CARD1_BLACK .EQ 0x3B 003C- 82 CARD2_BLACK .EQ 0x3C 003D- 83 CARD1_SUIT .EQ 0x3D 003E- 84 CARD2_SUIT .EQ 0x3E 0F00- 85 0F00- 86 0200- 87 .OR DISP_GR 0200-B1 3D B2 3D B3 3D B4 3D B5 3D B6 3D B7 3D 3D 3D 88 .HS B13DB23DB33DB43DB53DB63DB73D3D3D 0210-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 89 .HS 20202020202020202020202020203A20 0220-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 90 .HS 20202020202020202020202020203A20 0230-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 91 .HS 20202020202020202020202020203A20 0240-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 92 .HS 20202020202020202020202020203A20 0250-20 20 20 20 20 20 20 20 20 20 20 20 20 20 B8 20 93 .HS 2020202020202020202020202020B820 0260-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 94 .HS 20202020202020202020202020203A20 0270-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 95 .HS 20202020202020202020202020203A20 0280-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 96 .HS 20202020202020202020202020203A20 0290-20 20 20 20 20 20 20 20 20 20 20 20 20 20 B9 20 97 .HS 2020202020202020202020202020B920 02A0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 98 .HS 20202020202020202020202020203A20 02B0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 99 .HS 20202020202020202020202020203A20 02C0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 100 .HS 20202020202020202020202020203A20 02D0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 101 .HS 20202020202020202020202020203A20 02E0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 102 .HS 20202020202020202020202020203A20 02F0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 103 .HS 20202020202020202020202020203A20 0300-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 104 .HS 20202020202020202020202020203A20 0310-20 20 20 20 20 20 20 20 20 20 20 20 20 20 81 20 105 .HS 20202020202020202020202020208120 0320-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 106 .HS 20202020202020202020202020203A20 0330-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 107 .HS 20202020202020202020202020203A20 0340-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 108 .HS 20202020202020202020202020203A20 0350-20 20 20 20 20 20 20 20 20 20 20 20 20 20 82 20 109 .HS 20202020202020202020202020208220 0360-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 110 .HS 20202020202020202020202020203A20 0370-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 111 .HS 20202020202020202020202020203A20 0380-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 112 .HS 20202020202020202020202020203A20 0390-20 20 20 20 20 20 20 20 20 20 20 20 20 20 83 20 113 .HS 20202020202020202020202020208320 03A0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 114 .HS 20202020202020202020202020203A20 03B0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 115 .HS 20202020202020202020202020203A20 03C0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 116 .HS 20202020202020202020202020203A20 03D0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 84 20 117 .HS 20202020202020202020202020208420 03E0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 118 .HS 20202020202020202020202020203A20 03F0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 3A 20 119 .HS 20202020202020202020202020203A20 0400- 120 0B00- 121 .OR VAR_0B00 0B00- 122 ; 000102030405060708090A0B0C0DSWap 0B00-00 10 1D 2B 3A 4A 5B 6D 80 9A B4 B6 B8 BA BC F0 123 .HS 00101D2B3A4A5B6D809AB4B6B8BABCF0 0880- 124 .OR VAR_0880 0880-20 01 32 33 34 35 36 37 38 39 14 0A 11 0B 125 .HS 20013233343536373839140A110B ;Original Card Character 088E- 126 ;.HS 200132333435363738391F0A110B ;RealView Card Character 088E- 127 .OR VAR_088E 088E- 128 ;.HS 271B1D00 ;RealView Card Characters S H C D Suits 088E-13 08 03 04 129 .HS 13080304 ;Original VDU Card Characters S H C D Suits 0892- 130 .OR VAR_0892 0892-40 50 60 70 131 .HS 40506070 ;Foundation starting values 0896- 132 .OR VAR_0896 0896-00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 133 .HS 000102030405060708090A0B0C0D ;Cards 08A4-11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 134 .HS 1112131415161718191A1B1C1D 08B1-21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 135 .HS 2122232425262728292A2B2C2D 08BE-31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 136 .HS 3132333435363738393A3B3C3D 08CB- 137 08CB- 138 0400- 139 .OR PROG1 0400- 140 0400- 141 0400- 142 ENTRY: 0400- 143 ;=================================================================== 0400- 144 ;P2 is variables pointer 0F00 0400- 145 ;=================================================================== 0400- 146 0400-C4 0F 147 ( 10) LDI VAR_0F00/256 0402-36 148 ( 8) XPAH P2 0403-C4 00 149 ( 10) LDI VAR_0F00\256 0405-32 150 ( 8) XPAL P2 0406- 151 0406- 152 ;--------------------------------------------------------------------- 0406- 153 CLEAR_MEMORY: 0406- 154 0406-C4 0B 155 ( 10) LDI VAR_0B10/256 0408-35 156 ( 8) XPAH P1 0409-C4 10 157 ( 10) LDI VAR_0B10\256 040B-31 158 ( 8) XPAL P1 ; P1 now contains column data 040C- 159 040C-C4 44 160 ( 10) LDI 0x44 040E-CA 20 161 ( 18) ST TEMP(2) 0410- 162 0410- 163 CLEAR_MEM_0B00: 0410-C4 00 164 ( 10) LDI 0x00 ; Clear Memory 0x00 0412-CD 01 165 ( 18) ST @1(P1) 0414-AA 20 166 ( 22) ILD TEMP(2) 0416-9C F8 167 (9/11) JNZ CLEAR_MEM_0B00 0418- 168 0418-CA 38 169 ( 18) ST FOUNDATION2(2) 041A- 170 ;--------------------------------------------------------------------- 041A- 171 ;Set Foundation to initial values 041A-C4 0B 172 ( 10) LDI VAR_0BB4/256 041C-35 173 ( 8) XPAH P1 041D-C4 B4 174 ( 10) LDI VAR_0BB4\256 ;Place Foundation starting card 041F-31 175 ( 8) XPAL P1 0420- 176 0420-C4 08 177 ( 10) LDI VAR_0892/256 0422-37 178 ( 8) XPAH P3 0423-C4 92 179 ( 10) LDI VAR_0892\256 0425-33 180 ( 8) XPAL P3 ;P3 contains pointer to header info 0426- 181 0426-C4 04 182 ( 10) LDI 0x04 0428-CA 20 183 ( 18) ST TEMP(2) 042A- 184 042A- 185 LOOP0: 042A-C4 01 186 ( 10) LDI 0x01 042C-CD 01 187 ( 18) ST @1(P1) 042E-C7 01 188 ( 18) LD @1(P3) 0430-CD 01 189 ( 18) ST @1(P1) 0432-BA 20 190 ( 22) DLD TEMP(2) 0434-9C F4 191 (9/11) JNZ LOOP0 0436- 192 0436- 193 ;====================================================================== 0436- 194 0436-C4 08 195 ( 10) LDI VAR_08CB/256 0438-35 196 ( 8) XPAH P1 0439-C4 CB 197 ( 10) LDI VAR_08CB\256 043B-31 198 ( 8) XPAL P1 ; P1 now contains start address of Random Cards 043C- 199 043C- 200 ;---------------------------------------------------------------------- 043C- 201 043C-C4 00 202 ( 10) LDI 0x00 043E-CA 2E 203 ( 18) ST PRNG_T(P2) 0440-C2 2C 204 ( 18) LD PRNG_L(P2) ; Use RAM contents to set the seed for the PRNG 0442-9C 02 205 (9/11) JNZ SEED_EXIT 0444-AA 2C 206 ( 22) ILD PRNG_L(P2) ; Seeded value can't be zero (PRNG_H might be zero, 0446- 207 ;but not important so long as 16 bit PRNG is not zero) 0446- 208 0446- 209 SEED_EXIT: 0446-C4 00 210 ( 10) LDI 0 0448-CA 20 211 ( 18) ST TEMP(2) 044A- 212 044A- 213 SHUFFLE: 044A- 214 ;======================================================================= 044A- 215 ; In the main body of your game 044A- 216 ;JS P3,PRNG ; Call subroutine to update PRNG_L and PRNG_H 044A- 217 ; Test PRNG_L. if 0 or >52 then call subroutine again 044A- 218 044A- 219 ; ***************************************************************************** 044A- 220 ; Psuedo Random Number Generator subroutine 044A- 221 ; Generate next number in the 16 bit PRNG sequence 044A- 222 ; 044A- 223 ; High Byte Low Byte 044A- 224 ; --------------- ----------------- 044A- 225 ; |-> | 15 14 -----> 8 |--> | 7 6 5 4 3 2 1 0 | ---shift right ---> 044A- 226 ; | --------------- ----------------- 044A- 227 ; | | | | | 044A- 228 ; | /{{--| | | | 044A- 229 ; -<---------------------XOR/ {{------| | | 044A- 230 ; \ {{--------| | 044A- 231 ; \{{------------| 044A- 232 ; ***************************************************************************** 044A- 233 044A- 234 PRNG: 044A-C2 2C 235 ( 18) LD PRNG_L(P2) ; Code up to PRNG_5 XORs individual bits of PRNG_L 044C-01 236 ( 7) XAE 044D-40 237 ( 6) LDE 044E-D4 01 238 ( 10) ANI 0x01 ; Bit 0 0450-98 06 239 (9/11) JZ PRNG_1 0452-C2 2E 240 ( 18) LD PRNG_T(P2) ; PRNG_T stores the developing XOR result 0454-E4 01 241 ( 10) XRI 0x01 0456-CA 2E 242 ( 18) ST PRNG_T(P2) 0458- 243 PRNG_1: 0458-40 244 ( 6) LDE 0459-D4 04 245 ( 10) ANI 0x04 ; Bit 2 045B-98 06 246 (9/11) JZ PRNG_2 045D-C2 2E 247 ( 18) LD PRNG_T(P2) 045F-E4 01 248 ( 10) XRI 0x01 0461-CA 2E 249 ( 18) ST PRNG_T(P2) 0463- 250 PRNG_2: 0463-40 251 ( 6) LDE 0464-D4 08 252 ( 10) ANI 0x08 ; Bit 3 0466-98 06 253 (9/11) JZ PRNG_3 0468-C2 2E 254 ( 18) LD PRNG_T(P2) 046A-E4 01 255 ( 10) XRI 0x01 046C-CA 2E 256 ( 18) ST PRNG_T(P2) 046E- 257 PRNG_3: 046E-40 258 ( 6) LDE 046F-D4 20 259 ( 10) ANI 0x20 ; Bit 5 0471-98 06 260 (9/11) JZ PRNG_4 0473-C2 2E 261 ( 18) LD PRNG_T(P2) 0475-E4 01 262 ( 10) XRI 0x01 0477-CA 2E 263 ( 18) ST PRNG_T(P2) ; PRNG_T bit 0 now holds XOR of the 4 bits 0479- 264 PRNG_4: 0479-02 265 ( 5) CCL ; Clear Carry Flag 047A-C2 2E 266 ( 18) LD PRNG_T(P2) 047C-98 01 267 (9/11) JZ PRNG_5 047E-03 268 ( 5) SCL ; If PRNG_T is not zero then set the carry flag 047F- 269 PRNG_5: 047F-C2 2D 270 ( 18) LD PRNG_H(P2) 0481-D4 01 271 ( 10) ANI 0x01 0483-CA 2E 272 ( 18) ST PRNG_T(P2) ; Store lsb of PRNG_H in PRNG_T for later 0485-C2 2D 273 ( 18) LD PRNG_H(P2) 0487-1D 274 ( 5) SRL ; Rotate Carry flag into A and store in PRNG_H 0488-CA 2D 275 ( 18) ST PRNG_H(P2) 048A-02 276 ( 5) CCL 048B-C2 2E 277 ( 18) LD PRNG_T(P2) ; Determine state of PRNG_H bit 0 (as stored in PRNG_T) 048D-98 01 278 (9/11) JZ PRNG_7 048F- 279 PRNG_6: 048F-03 280 ( 5) SCL 0490- 281 PRNG_7: 0490-C2 2C 282 ( 18) LD PRNG_L(P2) 0492-1D 283 ( 5) SRL ; Shift bit 0 of PRNG_H into bit 7 of PRNG_L 0493-CA 2C 284 ( 18) ST PRNG_L(P2) ; 16 bit shift completed 0495- 285 0495- 286 ;======================================================================= 0495- 287 0495-98 B3 288 (9/11) JZ SHUFFLE ; Zero not required 0497-F4 CB 289 ( 11) ADI 0xcb ; Check Number < 53 (0x33) 0499-06 290 ( 5) CSA ;Copy Status to AC 049A-D4 80 291 ( 10) ANI 0x80 ;Check CY/L flag of status 049C-9C AC 292 (9/11) JNZ SHUFFLE ;Jump if number above 52 049E-C2 20 293 ( 18) LD TEMP(2) 04A0-98 13 294 (9/11) JZ FIRST ;Jump if first random number. 04A2- 295 04A2-C4 00 296 ( 10) LDI 0 04A4-CA 21 297 ( 18) ST COUNT(2) 04A6- 298 04A6- 299 NEXT_COUNT: 04A6-AA 21 300 ( 22) ILD COUNT(2) 04A8-01 301 ( 7) XAE 04A9-C1 80 302 ( 18) LD -128(P1) 04AB-E2 2C 303 ( 18) XOR PRNG_L(P2) 04AD-98 9B 304 (9/11) JZ SHUFFLE 04AF-C2 21 305 ( 18) LD COUNT(2) 04B1-E2 20 306 ( 18) XOR TEMP(2) 04B3-9C F1 307 (9/11) JNZ NEXT_COUNT 04B5- 308 04B5- 309 FIRST: 04B5-AA 20 310 ( 22) ILD TEMP(2) 04B7-01 311 ( 7) XAE 04B8-C2 2C 312 ( 18) LD PRNG_L(P2) ; Random Number 04BA-C9 80 313 ( 18) ST -128(P1) ; Place Card 04BC-C2 20 314 ( 18) LD TEMP(2) 04BE-E4 34 315 ( 10) XRI 0x34 ;Check we have 52 cards 04C0-9C 88 316 (9/11) JNZ SHUFFLE 04C2- 317 04C2- 318 ;======================================================================= 04C2- 319 ; We have 52 random numbers stored at 08CB 04C2- 320 ;======================================================================= 04C2- 321 04C2-C4 08 322 ( 10) LDI VAR_0896/256 04C4-37 323 ( 8) XPAH P3 04C5-C4 96 324 ( 10) LDI VAR_0896\256 04C7-33 325 ( 8) XPAL P3 ;VAR_0896 Pack of Cards Of Cards 04C8- 326 04C8-C4 01 327 ( 10) LDI 0x01 04CA-CA 26 328 ( 18) ST CARDNUM(2) 04CC- 329 04CC- 330 LOOP9: 04CC-C2 26 331 ( 18) LD CARDNUM(2) 04CE-01 332 ( 7) XAE 04CF-C1 80 333 ( 18) LD -128(P1) ;Load Random Number 04D1-01 334 ( 7) XAE 04D2-C3 80 335 ( 18) LD -128(P3) ;Load Card 04D4-CA 25 336 ( 18) ST CARD(2) 04D6- 337 04D6-C2 26 338 ( 18) LD CARDNUM(2) 04D8-01 339 ( 7) XAE 04D9-C2 25 340 ( 18) LD CARD(2) 04DB-C9 80 341 ( 18) ST -128(P1) ;Replace Random Number with card 04DD- 342 04DD-AA 26 343 ( 22) ILD CARDNUM(2) 04DF-E4 35 344 ( 10) XRI 0x35 ;0x34 = 52 cards 0x1C = 24 cards 04E1-9C E9 345 (9/11) JNZ LOOP9 04E3- 346 04E3- 347 04E3- 348 ;--------------------------------------------------------------------- 04E3- 349 04E3-C4 01 350 ( 10) LDI 0x01 04E5-CA 2F 351 ( 18) ST COL(2) 04E7-CA 30 352 ( 18) ST COL_1(2) 04E9-CA 26 353 ( 18) ST CARDNUM(2) 04EB- 354 04EB-C4 00 355 ( 10) LDI 0x00 04ED-CA 29 356 ( 18) ST C_HIDE(2) 04EF- 357 04EF- 358 LOOP1: 04EF-C4 08 359 ( 10) LDI VAR_08CB/256 04F1-35 360 ( 8) XPAH P1 04F2-C4 CB 361 ( 10) LDI VAR_08CB\256 04F4-31 362 ( 8) XPAL P1 ;VAR_08CB Random Numbers 04F5- 363 04F5-C2 26 364 ( 18) LD CARDNUM(2) 04F7-01 365 ( 7) XAE 04F8-C1 80 366 ( 18) LD -128(P1) 04FA-DA 29 367 ( 18) OR C_HIDE(2) 04FC-CA 25 368 ( 18) ST CARD(2) 04FE- 369 04FE-C4 0F 37 C4 91 33 3F 370 JS P3,ADD_CARD 0505- 371 0505-C4 80 372 ( 10) LDI 0x80 0507-CA 29 373 ( 18) ST C_HIDE(2) 0509- 374 0509- 375 CHECK_COL: 0509-C2 2F 376 ( 18) LD COL(2) 050B-E4 08 377 ( 10) XRI 0x08 050D-98 16 378 (9/11) JZ NEXT_CARDNUM ;Jump if column 8 050F- 379 050F-AA 2F 380 ( 22) ILD COL(2) ;Move to next column 0511-E4 08 381 ( 10) XRI 0x08 0513-9C 10 382 (9/11) JNZ NEXT_CARDNUM ;Jump if not column 8 after increament 0515- 383 0515-C4 00 384 ( 10) LDI 0x00 0517-CA 29 385 ( 18) ST C_HIDE(2) ;Unhide last card in column 0519-AA 30 386 ( 22) ILD COL_1(2) ;If not column 8 increment column 051B-CA 2F 387 ( 18) ST COL(2) 051D-E4 08 388 ( 10) XRI 0x08 051F-9C 04 389 (9/11) JNZ NEXT_CARDNUM 0521- 390 0521-C4 08 391 ( 10) LDI 0x08 0523-CA 2F 392 ( 18) ST COL(2) 0525- 393 0525- 394 NEXT_CARDNUM: 0525-AA 26 395 ( 22) ILD CARDNUM(2) 0527-E4 35 396 ( 10) XRI 0x35 ;0x34 = 52 cards 0x1C = 24 cards 0529-9C C4 397 (9/11) JNZ LOOP1 052B- 398 052B-C4 18 399 ( 10) LDI 0x18 052D-CA 22 400 ( 18) ST PACK_COUNT(2) ;Starting number of cards in Pack 052F- 401 052F- 402 052F- 403 052F- 404 052F- 405 ;====================================================================== 052F- 406 ;---------------------------Main Loop---------------------------------- 052F- 407 ;-------------------------Display Cards First-------------------------- 052F- 408 ;====================================================================== 052F- 409 052F- 410 DISPLAY_CARDS: 052F- 411 052F-02 412 ( 5) CCL 0530- 413 0530-C4 0F 414 ( 10) LDI VAR_0F00/256 0532-36 415 ( 8) XPAH P2 0533-C4 00 416 ( 10) LDI VAR_0F00\256 0535-32 417 ( 8) XPAL P2 0536- 418 0536-C4 01 419 ( 10) LDI 0x01 0538-CA 2F 420 ( 18) ST COL(2) 053A- 421 053A-C4 10 422 ( 10) LDI 0x10 053C-CA 1D 423 ( 18) ST COL_POS(2) 053E- 424 053E- 425 NEXT_COL1: 053E-C4 00 426 ( 10) LDI 0x00 0540-CA 26 427 ( 18) ST CARDNUM(2) 0542- 428 0542-C4 01 429 ( 10) LDI 0x01 0544-CA 32 430 ( 18) ST ROW(2) 0546- 431 0546-C4 02 432 ( 10) LDI 0x02 0548-35 433 ( 8) XPAH P1 0549-C2 1D 434 ( 18) LD COL_POS(2) 054B-31 435 ( 8) XPAL P1 054C- 436 054C- 437 NEXT_CARD_IN_ROW: 054C- 438 054C-AA 26 439 ( 22) ILD CARDNUM(2) 054E- 440 054E-35 441 ( 8) XPAH P1 054F-CA 1E 442 ( 18) ST DISP_H(2) ;Save Cursor position so P1 can be reused 0551-31 443 ( 8) XPAL P1 0552-CA 1F 444 ( 18) ST DISP_L(2) 0554- 445 0554-C4 0B 446 ( 10) LDI VAR_0B00/256 0556-35 447 ( 8) XPAH P1 0557-C4 00 448 ( 10) LDI VAR_0B00\256 0559-31 449 ( 8) XPAL P1 055A- 450 055A-C2 2F 451 ( 18) LD COL(2) 055C-01 452 ( 7) XAE 055D-C1 80 453 ( 18) LD -128(P1) 055F-31 454 ( 8) XPAL P1 ;Set P1 to column pointer 0560- 455 0560-C5 00 456 ( 18) LD @0(P1) 0562-CA 21 457 ( 18) ST COUNT(2) 0564- 458 0564-C2 26 459 ( 18) LD CARDNUM(2) 0566-01 460 ( 7) XAE 0567-C1 80 461 ( 18) LD -128(P1) 0569-CA 25 462 ( 18) ST CARD(2) 056B- 463 056B-C4 0F 37 C4 B6 33 3F 464 JS P3,GET_CARD_DETAILS 0572- 465 0572- 466 ;---------------------------------------------------------------------- 0572- 467 0572-C2 1E 468 ( 18) LD DISP_H(2) ;Get Cursor Position 0574-35 469 ( 8) XPAH P1 0575-C2 1F 470 ( 18) LD DISP_L(2) 0577-31 471 ( 8) XPAL P1 ;P1 contains location of cursor 0578- 472 0578-C2 21 473 ( 18) LD COUNT(2) 057A-98 2A 474 (9/11) JZ BLANK_ROW ;No cards in column 057C- 475 057C-C2 29 476 ( 18) LD C_HIDE(2) 057E-9C 1A 477 (9/11) JNZ HIDE_CARD 0580- 478 0580- 479 SHOW_CARD: 0580- 480 ;CCL ;Not sure if required 0580-C2 21 481 ( 18) LD COUNT(2) 0582-F4 75 482 ( 11) ADI 0x75 ;Check for more than 11 cards in column 0584-94 02 483 (9/11) JP LONG_COLUMN ;Jump if less than 11 cards in column 0586-90 0C 484 ( 11) JMP SHORT_COLUMN 0588- 485 0588- 486 LONG_COLUMN: 0588-C2 26 487 ( 18) LD CARDNUM(2) 058A-E4 01 488 ( 10) XRI 0x01 058C-98 06 489 (9/11) JZ SHORT_COLUMN ; Place seperator before cards except 1st Card 058E-C4 20 490 ( 10) LDI 0x20 ; Space Character 0590-CD 10 491 ( 18) ST @16(P1) ; Place Card 0592-AA 32 492 ( 22) ILD ROW(2) 0594- 493 0594- 494 SHORT_COLUMN: 0594-C2 2A 495 ( 18) LD C_N_ASC(2) 0596-CD 10 496 ( 18) ST @16(P1) ; Place Card 0598-AA 32 497 ( 22) ILD ROW(2) 059A- 498 059A- 499 HIDE_CARD: 059A-C2 2B 500 ( 18) LD C_S_ASC(2) ; + character 059C-CD 10 501 ( 18) ST @16(P1) ; Place Card 059E-AA 32 502 ( 22) ILD ROW(2) 05A0- 503 05A0-C2 26 504 ( 18) LD CARDNUM(2) 05A2-E2 21 505 ( 18) XOR COUNT(2) 05A4-9C A6 506 (9/11) JNZ NEXT_CARD_IN_ROW 05A6- 507 05A6- 508 ;******************************************************************** 05A6- 509 05A6- 510 BLANK_ROW: ;Blank remaing rows in column 05A6-AA 32 511 ( 22) ILD ROW(2) 05A8-C4 20 512 ( 10) LDI 0x20 05AA-CD 10 513 ( 18) ST @16(P1) ;Place space character 05AC-02 514 ( 5) CCL 05AD-C2 32 515 ( 18) LD ROW(2) 05AF-F4 61 516 ( 11) ADI 0x61 05B1-94 F3 517 (9/11) JP BLANK_ROW 05B3- 518 05B3- 519 05B3- 520 NEXT_COL: 05B3-AA 1D 521 ( 22) ILD COL_POS(2) ;move cursor 2 places to the right 05B5-AA 1D 522 ( 22) ILD COL_POS(2) 05B7-AA 2F 523 ( 22) ILD COL(2) 05B9-E4 08 524 ( 10) XRI 0x08 ;Number of columns 0x08 05BB-9C 81 525 (9/11) JNZ NEXT_COL1 05BD- 526 05BD- 527 05BD- 528 ;--------------------------------------------------------------------- 05BD- 529 ;Display Column 8 to D 05BD- 530 ;Col(2) should equal 0x08 at this point 05BD- 531 05BD-C4 01 532 ( 10) LDI 0x01 05BF-CA 32 533 ( 18) ST ROW(2) 05C1- 534 05C1-C4 FE 535 ( 10) LDI 0xFE 05C3-CA 36 536 ( 18) ST FOUNDATION(2) ;FE=8,FF=9,00=A,01=B,02=C;03=D 05C5- 537 05C5- 538 LOOP4: 05C5-C4 0B 539 ( 10) LDI VAR_0B00/256 05C7-35 540 ( 8) XPAH P1 05C8-C4 00 541 ( 10) LDI VAR_0B00\256 05CA-31 542 ( 8) XPAL P1 05CB- 543 05CB-C2 2F 544 ( 18) LD COL(2) 05CD-01 545 ( 7) XAE 05CE-C1 80 546 ( 18) LD -128(P1) 05D0-31 547 ( 8) XPAL P1 ;Set P1 to = 0x0B Card Number 05D1- 548 05D1-C4 01 549 ( 10) LDI 0x01 05D3-01 550 ( 7) XAE 05D4- 551 05D4-C2 36 552 ( 18) LD FOUNDATION(2) 05D6-9C 02 553 (9/11) JNZ NEXT2 05D8-AA 32 554 ( 22) ILD ROW(2) 05DA- 555 05DA- 556 NEXT2: 05DA-C2 36 557 ( 18) LD FOUNDATION(2) 05DC-94 03 558 (9/11) JP GET_CARD 05DE-C5 00 559 ( 18) LD @0(P1) ;Number of cards in column 05E0-01 560 ( 7) XAE 05E1- 561 05E1- 562 GET_CARD: 05E1-C1 80 563 ( 18) LD -128(P1) ;Load Card at 0x0B?? 05E3-CA 25 564 ( 18) ST CARD(2) 05E5- 565 05E5-C4 0F 37 C4 B6 33 3F 566 JS P3,GET_CARD_DETAILS 05EC- 567 05EC-C4 02 568 ( 10) LDI DISP_GR/256 ;DISP_GR .EQ 0x0200 05EE-35 569 ( 8) XPAH P1 05EF-C4 0F 570 ( 10) LDI 0x0F ;020F used due to header 05F1-31 571 ( 8) XPAL P1 ; P1 now contains start address of cards display 020F 05F2- 572 05F2-C2 32 573 ( 18) LD ROW(2) 05F4-CA 20 574 ( 18) ST TEMP(2) 05F6- 575 YPOS10: 05F6-C5 40 576 ( 18) LD @0x40(P1) 05F8-BA 20 577 ( 22) DLD TEMP(2) 05FA-9C FA 578 (9/11) JNZ YPOS10 05FC- 579 05FC-C2 2A 580 ( 18) LD C_N_ASC(2) 05FE-CD 10 581 ( 18) ST @16(P1) ; Place Card 0600-C2 2B 582 ( 18) LD C_S_ASC(2) ; + character 0602-CD 00 583 ( 18) ST @0(P1) ; Place Card 0604- 584 0604-AA 36 585 ( 22) ILD FOUNDATION(2) 0606-AA 32 586 ( 22) ILD ROW(2) 0608-AA 2F 587 ( 22) ILD COL(2) 060A-E4 0E 588 ( 10) XRI 0x0E ; 060C-9C B7 589 (9/11) JNZ LOOP4 060E- 590 060E- 591 060E- 592 ;====================================================================== 060E- 593 ;----------------------Get User Input---------------------------------- 060E- 594 ;====================================================================== 060E- 595 060E- 596 GET_KEY_1: 060E-02 597 ( 5) CCL 060F-C4 01 37 C4 84 33 3F 598 JS P3,MK14_KEYS 0616-08 599 ( 5) NOP 0617-08 600 ( 5) NOP 0618-01 601 ( 7) XAE 0619-CA 33 602 ( 18) ST KEYPRESS(2) 061B-CA 34 603 ( 18) ST KEYPRESS_1(2) 061D-CA 04 604 ( 18) ST DISPLAY_4(2) 061F-98 ED 605 (9/11) JZ GET_KEY_1 0621- 606 0621- 607 ;-------------------Moved to preserve for debugging 0621- 608 0621-C4 00 609 ( 10) LDI 0x00 0623-CA 36 610 ( 18) ST FOUNDATION(2) 0625-CA 37 611 ( 18) ST FOUNDATION1(2) ;Reset Foundation Key to zero (False) 0627-CA 38 612 ( 18) ST FOUNDATION2(2) 0629-CA 31 613 ( 18) ST COL_8(2) ;Reset Col_8 flag to zero (False) 062B-CA 24 614 ( 18) ST VALID(2) ;Set valid to Zero (False) 062D- 615 062D- 616 062D- 617 ;Clear 7 Segmant display -------------------------------------------- 062D- 618 062D-CA 08 619 ( 18) ST DISPLAY_0(2) 062F-CA 07 620 ( 18) ST DISPLAY_1(2) 0631-CA 06 621 ( 18) ST DISPLAY_2(2) 0633-CA 05 622 ( 18) ST DISPLAY_3(2) 0635-CA 01 623 ( 18) ST DISPLAY_6(2) 0637-CA 00 624 ( 18) ST DISPLAY_7(2) 0639- 625 0639- 626 ;------------------------------------------------------------- 0639- 627 0639-C2 34 628 ( 18) LD KEYPRESS_1(2) 063B-E4 08 629 ( 10) XRI 0x08 ;Check for digit 8 Take Card From Pack 063D-98 08 630 (9/11) JZ TAKE_CARD 063F- 631 063F-C2 34 632 ( 18) LD KEYPRESS_1(2) 0641-F4 72 633 ( 11) ADI 0x72 ;Check for digit below d 0643-94 45 634 (9/11) JP KEY1_7 0645-90 C7 635 ( 11) JMP GET_KEY_1 0647- 636 0647- 637 ;--------------------------------------------------------------------- 0647- 638 TAKE_CARD: 0647-C2 22 639 ( 18) LD PACK_COUNT(2) 0649-9C 1D 640 (9/11) JNZ TAKE_NEXT_CARD 064B- 641 064B- 642 MOVE_PACK: 064B-C4 09 643 ( 10) LDI 0x09 064D-CA 2F 644 ( 18) ST COL(2) 064F-C4 07 37 C4 8D 33 3F 645 JS P3,DELETE_CARD 0656-40 646 ( 6) LDE 0657-CA 22 647 ( 18) ST PACK_COUNT(2) 0659- 648 0659-C4 08 649 ( 10) LDI 0x08 065B-CA 2F 650 ( 18) ST COL(2) 065D-C4 0F 37 C4 91 33 3F 651 JS P3,ADD_CARD 0664- 652 0664-C2 22 653 ( 18) LD PACK_COUNT(2) 0666-9C E3 654 (9/11) JNZ MOVE_PACK 0668- 655 0668- 656 TAKE_NEXT_CARD: 0668-C4 08 657 ( 10) LDI 0x08 066A-CA 2F 658 ( 18) ST COL(2) 066C-C4 07 37 C4 8D 33 3F 659 JS P3,DELETE_CARD 0673-40 660 ( 6) LDE 0674-CA 22 661 ( 18) ST PACK_COUNT(2) 0676- 662 0676-C4 09 663 ( 10) LDI 0x09 0678-CA 2F 664 ( 18) ST COL(2) 067A-C4 0F 37 C4 91 33 3F 665 JS P3,ADD_CARD 0681- 666 0681- 667 ;DISPLAY_CARDS_JUMP: 0681-C4 05 668 ( 10) LDI DISPLAY_CARDS/256 ;Get Display Cards address to far to jump 0683-37 669 ( 8) XPAH P3 0684-C4 2F 670 ( 10) LDI DISPLAY_CARDS\256 0686-33 671 ( 8) XPAL P3 0687-C7 FF 672 ( 18) LD @-1(3) ;Adjust P3 to set correct jump address 0689-3F 673 ( 7) XPPC 3 068A- 674 068A- 675 ;---------------------------------------------------------------------- 068A- 676 KEY1_7: 068A- 677 068A-C2 33 678 ( 18) LD KEYPRESS(2) 068C-F4 76 679 ( 11) ADI 0x76 ;Set Suit Flag used by column count 068E-94 06 680 (9/11) JP KEY1_NOT_FOUNDATION ;Jump if positive 0690-C4 01 681 ( 10) LDI 0x01 0692-CA 36 682 ( 18) ST FOUNDATION(2) 0694-CA 37 683 ( 18) ST FOUNDATION1(2) 0696- 684 0696- 685 KEY1_NOT_FOUNDATION: 0696- 686 0696-C4 07 37 C4 CA 33 3F 687 JS P3,GET_CARD_FROM_KEYPRESS 069D- 688 069D-C2 3A 689 ( 18) LD CARD2_VAL(2) 069F-CA 39 690 ( 18) ST CARD1_VAL(2) 06A1-C2 3E 691 ( 18) LD CARD2_SUIT(2) 06A3-CA 3D 692 ( 18) ST CARD1_SUIT(2) 06A5-C2 3C 693 ( 18) LD CARD2_BLACK(2) 06A7-CA 3B 694 ( 18) ST CARD1_BLACK(2) 06A9- 695 06A9- 696 06A9- 697 GET_KEY_2 06A9-C4 01 37 C4 84 33 3F 698 JS P3,MK14_KEYS 06B0-08 699 ( 5) NOP 06B1-08 700 ( 5) NOP 06B2-01 701 ( 7) XAE 06B3-CA 33 702 ( 18) ST KEYPRESS(2) 06B5-CA 35 703 ( 18) ST KEYPRESS_2(2) 06B7-CA 00 704 ( 18) ST DISPLAY_7(2) 06B9-98 EE 705 (9/11) JZ GET_KEY_2 06BB- 706 06BB-C4 00 707 ( 10) LDI 0x00 06BD-CA 36 708 ( 18) ST FOUNDATION(2) 06BF- 709 06BF- 710 ;Check Foundation key pressed 06BF-C2 33 711 ( 18) LD KEYPRESS(2) 06C1-F4 76 712 ( 11) ADI 0x76 ;Set Suit Flag used by column count 06C3-94 06 713 (9/11) JP KEY2_NOT_FOUNDATION ;Jump if positive 06C5-C4 01 714 ( 10) LDI 0x01 06C7-CA 36 715 ( 18) ST FOUNDATION(2) 06C9-CA 38 716 ( 18) ST FOUNDATION2(2) ;Key A to D indicate foundation 06CB- 717 06CB- 718 KEY2_NOT_FOUNDATION: 06CB- 719 06CB-C4 07 37 C4 CA 33 3F 720 JS P3,GET_CARD_FROM_KEYPRESS 06D2- 721 06D2- 722 ;--------------------------------------------------------------------- 06D2- 723 CHECK_VALID_MOVE1: ;Simple valid check 06D2-02 724 ( 5) CCL 06D3-C2 39 725 ( 18) LD CARD1_VAL(2) 06D5-F4 01 726 ( 11) ADI 0x01 06D7-E2 3A 727 ( 18) XOR CARD2_VAL(2) 06D9-9C 0C 728 (9/11) JNZ CHECK_VALID_MOVE2 ;Not valid so check Valid move 2 06DB- 729 06DB- 730 CHECK_COLOUR: 06DB-C2 3B 731 ( 18) LD CARD1_BLACK(2) 06DD-E2 3C 732 ( 18) XOR CARD2_BLACK(2) 06DF-98 06 733 (9/11) JZ CHECK_VALID_MOVE2 ;Not valid so check Valid move 2 06E1-C4 02 734 ( 10) LDI 0x02 ;Valid Move 06E3-CA 24 735 ( 18) ST VALID(2) 06E5-90 24 736 ( 11) JMP VALID_MOVE 06E7- 737 06E7- 738 ;--------------------------------------------------------------------- 06E7- 739 CHECK_VALID_MOVE2: ;Check move card to foundation 06E7-C2 38 740 ( 18) LD FOUNDATION2(2) 06E9-98 15 741 (9/11) JZ NOT_VALID_MOVE2 06EB-02 742 ( 5) CCL 06EC-C2 3A 743 ( 18) LD CARD2_VAL(2) 06EE-F4 01 744 ( 11) ADI 0x01 06F0-E2 39 745 ( 18) XOR CARD1_VAL(2) 06F2-9C 0C 746 (9/11) JNZ NOT_VALID_MOVE2 06F4- 747 06F4- 748 CHECK_SAME_SUIT: 06F4-C2 3D 749 ( 18) LD CARD1_SUIT(2) 06F6-E2 3E 750 ( 18) XOR CARD2_SUIT(2) 06F8-9C 06 751 (9/11) JNZ NOT_VALID_MOVE2 06FA-C4 04 752 ( 10) LDI 0x04 ;Valid Move 1 = True 06FC-CA 24 753 ( 18) ST VALID(2) 06FE-90 0B 754 ( 11) JMP VALID_MOVE 0700- 755 0700- 756 ;--------------------------------------------------------------------- 0700- 757 NOT_VALID_MOVE2: 0700-C4 0F 37 C4 3E 33 3F 758 JS P3,CHECK_VALID_MOVE3 ;Check for King on empty column 0707-C2 24 759 ( 18) LD VALID(2) 0709-98 26 760 (9/11) JZ CHECK_MULTI_MOVE 070B- 761 070B- 762 VALID_MOVE: 070B- 763 070B-C2 34 764 ( 18) LD KEYPRESS_1(2) 070D-CA 2F 765 ( 18) ST COL(2) 070F-C4 07 37 C4 8D 33 3F 766 JS P3,DELETE_CARD 0716- 767 0716-C2 35 768 ( 18) LD KEYPRESS_2(2) 0718-CA 2F 769 ( 18) ST COL(2) 071A-C4 0F 37 C4 91 33 3F 770 JS P3,ADD_CARD 0721- 771 0721- 772 ;Check if game has finished, no room to add additional code 0721- 773 0721- 774 DISPLAY_CARDS_JUMP: 0721-C4 05 775 ( 10) LDI DISPLAY_CARDS/256 ;Get Display Cards address to far to jump 0723-37 776 ( 8) XPAH P3 0724-C4 2F 777 ( 10) LDI DISPLAY_CARDS\256 0726-33 778 ( 8) XPAL P3 0727-C7 FF 779 ( 18) LD @-1(3) ;Adjust P3 to set correct execution address 0729-3F 780 ( 7) XPPC 3 072A- 781 072A- 782 ;--------------------------------------------------------------------- 072A- 783 END: 072A- 784 072A-C4 00 785 ( 10) LDI PROM/256 ;Get start address of SCIOS 072C-37 786 ( 8) XPAH P3 072D-C4 51 787 ( 10) LDI PROM\256 072F-33 788 ( 8) XPAL P3 0730-3F 789 ( 7) XPPC 3 0731- 790 0731- 791 ;---------------------------------------------------------------------- 0731- 792 CHECK_MULTI_MOVE: 0731- 793 0731-C2 31 794 ( 18) LD COL_8(2) 0733-9C EC 795 (9/11) JNZ DISPLAY_CARDS_JUMP 0735- 796 0735-C4 0F 37 C4 4D 33 3F 797 JS P3,COPY_CARDS 073C- 798 073C-C4 0F 37 C4 3E 33 3F 799 JS P3,CHECK_VALID_MOVE3 ;Check for King on empty column 0743-C2 24 800 ( 18) LD VALID(2) 0745-9C 20 801 (9/11) JNZ VALID_MOVE2 0747- 802 0747-C4 0B 37 C4 CB 33 3F 803 JS P3,CALCULATE_CARDS_TO_MOVE 074E-C2 24 804 ( 18) LD VALID(2) ;Valid holds valid move 0750-98 CF 805 (9/11) JZ DISPLAY_CARDS_JUMP ;Not Valid move skip update 0752- 806 0752- 807 VALID_MULTI_MOVE: 0752- 808 0752-C2 23 809 ( 18) LD MOVE_COUNT(2) 0754-E2 21 810 ( 18) XOR COUNT(2) 0756-98 0F 811 (9/11) JZ VALID_MOVE2 ;Confirm we have at least 1 card to move 0758- 812 0758-C4 0E 813 ( 10) LDI 0x0E 075A-CA 2F 814 ( 18) ST COL(2) 075C-C4 07 37 C4 8D 33 3F 815 JS P3,DELETE_CARD 0763- 816 0763-BA 23 817 ( 22) DLD MOVE_COUNT(2) 0765-90 EB 818 ( 11) JMP VALID_MULTI_MOVE 0767- 819 0767- 820 VALID_MOVE2: 0767-C2 34 821 ( 18) LD KEYPRESS_1(2) 0769-CA 2F 822 ( 18) ST COL(2) 076B-C4 07 37 C4 8D 33 3F 823 JS P3,DELETE_CARD 0772- 824 0772-C4 0E 825 ( 10) LDI 0x0E 0774-CA 2F 826 ( 18) ST COL(2) 0776-C4 07 37 C4 8D 33 3F 827 JS P3,DELETE_CARD 077D- 828 077D-C2 35 829 ( 18) LD KEYPRESS_2(2) 077F-CA 2F 830 ( 18) ST COL(2) 0781-C4 0F 37 C4 91 33 3F 831 JS P3,ADD_CARD 0788- 832 0788-BA 23 833 ( 22) DLD MOVE_COUNT(2) 078A-9C DB 834 (9/11) JNZ VALID_MOVE2 078C-90 93 835 ( 11) JMP DISPLAY_CARDS_JUMP 078E- 836 078E- 837 ;====================================================================== 078E- 838 ;====================================================================== 078E- 839 DELETE_CARD: 078E-C4 0B 840 ( 10) LDI VAR_0B00/256 0790-35 841 ( 8) XPAH P1 0791-C4 00 842 ( 10) LDI VAR_0B00\256 0793-31 843 ( 8) XPAL P1 0794- 844 0794-C2 2F 845 ( 18) LD COL(2) 0796-01 846 ( 7) XAE 0797-C1 80 847 ( 18) LD -128(P1) 0799-31 848 ( 8) XPAL P1 ;Set P1 to = 0x0B Card Number 079A- 849 079A-C2 37 850 ( 18) LD FOUNDATION1(2) 079C-9C 1D 851 (9/11) JNZ DELETE_CARD_FOUNDATION ;Check if foundation, if so store card at plus 1 079E- 852 079E- 853 NOT_FOUNDATION2: 079E-C5 00 854 ( 18) LD @0(P1) ;Number of cards in column 07A0-01 855 ( 7) XAE 07A1-C1 80 856 ( 18) LD -128(P1) ;Load Card at 0x0B?? 07A3-D4 7F 857 ( 10) ANI 0x7F 07A5-CA 25 858 ( 18) ST CARD(2) 07A7-C4 00 859 ( 10) LDI 0x00 07A9-C9 80 860 ( 18) ST -128(P1) 07AB- 861 07AB-B9 00 862 ( 22) DLD @0(P1) ;Reduce Number of cards in column by 1 07AD-01 863 ( 7) XAE ;Need to check zero cards left in column 07AE- 864 07AE-C2 2F 865 ( 18) LD COL(2) 07B0-E4 08 866 ( 10) XRI 0x08 ;Check column not 8 do not show col 8 07B2-98 06 867 (9/11) JZ DELETE_CARD_RETURN 07B4- 868 07B4-C1 80 869 ( 18) LD -128(P1) ;Load Card at 0x0B?? 07B6-D4 7F 870 ( 10) ANI 0x7F ;Unhide card 07B8-C9 80 871 ( 18) ST -128(P1) 07BA- 872 07BA- 873 DELETE_CARD_RETURN: 07BA-3F 874 ( 7) RET P3 07BB- 875 07BB- 876 DELETE_CARD_FOUNDATION: 07BB-C4 01 877 ( 10) LDI 0x01 07BD-01 878 ( 7) XAE 07BE-C1 80 879 ( 18) LD -128(P1) 07C0-CA 25 880 ( 18) ST CARD(2) 07C2-BA 25 881 ( 22) DLD CARD(2) 07C4-C9 80 882 ( 18) ST -128(P1) 07C6-AA 25 883 ( 22) ILD CARD(2) 07C8-B9 00 884 ( 22) DLD @0(P1) 07CA-3F 885 ( 7) RET P3 07CB- 886 07CB- 887 ;====================================================================== 07CB- 888 GET_CARD_FROM_KEYPRESS: 07CB-C4 0B 889 ( 10) LDI VAR_0B00/256 07CD-35 890 ( 8) XPAH P1 07CE-C4 00 891 ( 10) LDI VAR_0B00\256 07D0-31 892 ( 8) XPAL P1 07D1- 893 07D1-C2 33 894 ( 18) LD KEYPRESS(2) ;Check if keypress is > 8 (Col 8) 07D3-F4 78 895 ( 11) ADI 0x78 07D5-94 04 896 (9/11) JP NOT_COL_8 ;Jump if positive 07D7-C4 01 897 ( 10) LDI 0x01 ;Set COL_8 flag to True 07D9-CA 31 898 ( 18) ST COL_8(2) 07DB- 899 07DB- 900 NOT_COL_8: 07DB-C2 33 901 ( 18) LD KEYPRESS(2) 07DD-01 902 ( 7) XAE 07DE-C1 80 903 ( 18) LD -128(P1) 07E0-31 904 ( 8) XPAL P1 ;Set P1 to = 0x0B Card Number 07E1- 905 07E1-C4 01 906 ( 10) LDI 0x01 ;Number of cards in column 07E3-01 907 ( 7) XAE 07E4- 908 07E4-C2 36 909 ( 18) LD FOUNDATION(2) 07E6-9C 03 910 (9/11) JNZ FOUNDATION_COL 07E8- 911 07E8-C5 00 912 ( 18) LD @0(P1) ;Number of cards in column 07EA-01 913 ( 7) XAE 07EB- 914 07EB- 915 FOUNDATION_COL: 07EB-C1 80 916 ( 18) LD -128(P1) ;Load Card at 0x0B?? 07ED-CA 25 917 ( 18) ST CARD(2) 07EF- 918 07EF-D4 0F 919 ( 10) ANI 0x0F 07F1-CA 3A 920 ( 18) ST CARD2_VAL(2) 07F3-C2 25 921 ( 18) LD CARD(2) 07F5-D4 30 922 ( 10) ANI 0x30 07F7-CA 3E 923 ( 18) ST CARD2_SUIT(2) 07F9-D4 10 924 ( 10) ANI 0x10 ;5th Bit Set for black card 07FB-CA 3C 925 ( 18) ST CARD2_BLACK(2) 07FD- 926 07FD-3F 927 ( 7) RET P3 07FE- 928 07FE- 929 ;====================================================================== 07FE- 930 ;====================================================================== 07FE- 931 ;====================================================================== 07FE- 932 ;====================================================================== 0F3F- 933 .OR PROG2 0F3F- 934 0F3F- 935 CHECK_VALID_MOVE3: ;Check for King on empty column 0F3F- 936 0F3F-C2 39 937 ( 18) LD CARD1_VAL(2) 0F41-E4 0D 938 ( 10) XRI 0x0D 0F43-9C 08 939 (9/11) JNZ CHECK_VALID_MOVE3_RETURN 0F45- 940 0F45- 941 CHECK_NO_CARDS_IN_COLUMN: 0F45-C2 3A 942 ( 18) LD CARD2_VAL(2) 0F47-9C 04 943 (9/11) JNZ CHECK_VALID_MOVE3_RETURN 0F49-C4 08 944 ( 10) LDI 0x08 ;Valid Move 0F4B-CA 24 945 ( 18) ST VALID(2) 0F4D- 946 0F4D- 947 CHECK_VALID_MOVE3_RETURN: 0F4D-3F 948 ( 7) RET P3 0F4E- 949 0F4E- 950 COPY_CARDS: 0F4E- 951 0F4E-C4 0B 952 ( 10) LDI VAR_SWAP/256 0F50-35 953 ( 8) XPAH P1 0F51-C4 BC 954 ( 10) LDI VAR_SWAP\256 0F53-31 955 ( 8) XPAL P1 0F54- 956 0F54-C4 00 957 ( 10) LDI 0x00 0F56-CD 00 958 ( 18) ST @0(P1) ;Set Copy are to zero 0F58- 959 0F58-C4 00 960 ( 10) LDI VAR_0B00\256 0F5A-31 961 ( 8) XPAL P1 0F5B- 962 0F5B-C2 34 963 ( 18) LD KEYPRESS_1(2) 0F5D-01 964 ( 7) XAE 0F5E-C1 80 965 ( 18) LD -128(P1) 0F60-31 966 ( 8) XPAL P1 ;Set P1 to = 0x0B Card Number 0F61- 967 0F61-C5 00 968 ( 18) LD @0(P1) 0F63-CA 21 969 ( 18) ST COUNT(2) ;Number of cards in column 0F65- 970 0F65- 971 LOOP6: 0F65-C4 00 972 ( 10) LDI VAR_0B00\256 0F67-31 973 ( 8) XPAL P1 0F68- 974 0F68-C2 34 975 ( 18) LD KEYPRESS_1(2) 0F6A-01 976 ( 7) XAE 0F6B-C1 80 977 ( 18) LD -128(P1) 0F6D-31 978 ( 8) XPAL P1 ;Set P1 to = 0x0B Card Number 0F6E- 979 0F6E-C2 21 980 ( 18) LD COUNT(2) 0F70-01 981 ( 7) XAE 0F71-C1 80 982 ( 18) LD -128(P1) ;Load Card at 0x0B?? 0F73-94 02 983 (9/11) JP COPY_CARD ;Check for hidden cards, hidden cards are negative 0F75-90 16 984 ( 11) JMP COPY_CARDS_RETURN ;No need to copy hidden cards 0F77- 985 0F77- 986 COPY_CARD: 0F77-CA 25 987 ( 18) ST CARD(2) 0F79- 988 0F79-C4 BC 989 ( 10) LDI VAR_SWAP\256 0F7B-31 990 ( 8) XPAL P1 0F7C- 991 0F7C-A9 00 992 ( 22) ILD @0(P1) ;Increment Number of cards in column 0F7E-CA 23 993 ( 18) ST MOVE_COUNT(2) 0F80-01 994 ( 7) XAE 0F81-C2 25 995 ( 18) LD CARD(2) 0F83-C9 80 996 ( 18) ST -128(P1) 0F85- 997 0F85-D4 0F 998 ( 10) ANI 0x0F 0F87-CA 39 999 ( 18) ST CARD1_VAL(2) 0F89- 1000 0F89-BA 21 1001 ( 22) DLD COUNT(2) 0F8B-9C D8 1002 (9/11) JNZ LOOP6 0F8D- 1003 0F8D- 1004 COPY_CARDS_RETURN: 0F8D- 1005 0F8D-C2 23 1006 ( 18) LD MOVE_COUNT(2) 0F8F-CA 21 1007 ( 18) ST COUNT(2) 0F91-3F 1008 ( 7) RET P3 0F92- 1009 0F92- 1010 ;===================================================================== 0F92- 1011 ADD_CARD 0F92-C4 0B 1012 ( 10) LDI VAR_0B00/256 0F94-35 1013 ( 8) XPAH P1 0F95-C4 00 1014 ( 10) LDI VAR_0B00\256 0F97-31 1015 ( 8) XPAL P1 0F98- 1016 0F98-C2 2F 1017 ( 18) LD COL(2) 0F9A-01 1018 ( 7) XAE 0F9B-C1 80 1019 ( 18) LD -128(P1) 0F9D-31 1020 ( 8) XPAL P1 ;Set P1 to = 0x0B Card Number 0F9E- 1021 0F9E-A9 00 1022 ( 22) ILD @0(P1) ;Increment Number of cards in column 0FA0-01 1023 ( 7) XAE 0FA1- 1024 0FA1-C2 38 1025 ( 18) LD FOUNDATION2(2) 0FA3-98 01 1026 (9/11) JZ STORE_CARD ;Check if foundation, if so store card at plus 1 0FA5-01 1027 ( 7) XAE 0FA6- 1028 0FA6- 1029 STORE_CARD: 0FA6-C2 2F 1030 ( 18) LD COL(2) 0FA8-E4 08 1031 ( 10) XRI 0x08 0FAA-9C 06 1032 (9/11) JNZ STORE_CARD2 0FAC-C2 25 1033 ( 18) LD CARD(2) 0FAE-DC 80 1034 ( 10) ORI 0x80 ;Hide cards in Stack 0FB0-CA 25 1035 ( 18) ST CARD(2) 0FB2- 1036 0FB2- 1037 STORE_CARD2: 0FB2-C2 25 1038 ( 18) LD CARD(2) 0FB4-C9 80 1039 ( 18) ST -128(P1) ;Store Card at 0x0B00 0FB6- 1040 0FB6- 1041 ADD_CARD_RETURN: 0FB6-3F 1042 ( 7) RET P3 0FB7- 1043 0FB7- 1044 ;====================================================================== 0FB7- 1045 GET_CARD_DETAILS: 0FB7-C4 20 1046 ( 10) LDI 0x20 ; space character 0FB9-CA 2A 1047 ( 18) ST C_N_ASC(2) 0FBB-CA 2B 1048 ( 18) ST C_S_ASC(2) 0FBD- 1049 0FBD-C2 25 1050 ( 18) LD CARD(2) 0FBF-98 36 1051 (9/11) JZ GET_CARD_DETAILS_RETURN ;No need to get card details 0FC1- 1052 0FC1-D4 0F 1053 ( 10) ANI 0x0F 0FC3-CA 28 1054 ( 18) ST C_NUM(2) ;Card Number 0FC5- 1055 0FC5-C4 08 1056 ( 10) LDI VAR_0880/256 ;Card Asc Values held at 0880 0FC7-35 1057 ( 8) XPAH P1 0FC8-C4 80 1058 ( 10) LDI VAR_0880\256 0FCA-31 1059 ( 8) XPAL P1 0FCB- 1060 0FCB-C2 28 1061 ( 18) LD C_NUM(2) 0FCD-01 1062 ( 7) XAE 0FCE-C1 80 1063 ( 18) LD -128(P1) 0FD0-CA 2A 1064 ( 18) ST C_N_ASC(2) 0FD2- 1065 0FD2- 1066 0FD2-C2 25 1067 ( 18) LD CARD(2) 0FD4-D4 30 1068 ( 10) ANI 0x30 0FD6-1E 1069 ( 5) RR 0FD7-1E 1070 ( 5) RR 0FD8-1E 1071 ( 5) RR 0FD9-1E 1072 ( 5) RR 0FDA-CA 27 1073 ( 18) ST C_SUIT(2) ;Card Suit 0FDC- 1074 0FDC-C4 08 1075 ( 10) LDI VAR_088E/256 ;Card Suit Asc Values 0FDE-35 1076 ( 8) XPAH P1 0FDF-C4 8E 1077 ( 10) LDI VAR_088E\256 0FE1-31 1078 ( 8) XPAL P1 0FE2- 1079 0FE2-C2 27 1080 ( 18) LD C_SUIT(2) 0FE4-01 1081 ( 7) XAE 0FE5-C1 80 1082 ( 18) LD -128(P1) 0FE7-CA 2B 1083 ( 18) ST C_S_ASC(2) 0FE9- 1084 0FE9-C2 25 1085 ( 18) LD CARD(2) 0FEB-D4 80 1086 ( 10) ANI 0x80 ;Check if card is hidden 0FED-CA 29 1087 ( 18) ST C_HIDE(2) 0FEF-98 06 1088 (9/11) JZ GET_CARD_DETAILS_RETURN 0FF1- 1089 0FF1-C4 24 1090 ( 10) LDI 0x24 ;Card Hide Charater, normally $ 0FF3-CA 2A 1091 ( 18) ST C_N_ASC(2) 0FF5-CA 2B 1092 ( 18) ST C_S_ASC(2) 0FF7- 1093 0FF7- 1094 GET_CARD_DETAILS_RETURN: 0FF7-3F 1095 ( 7) RET P3 0FF8- 1096 ;====================================================================== 0FF8- 1097 ;====================================================================== 0FF8- 1098 ;====================================================================== 0FF8- 1099 ;====================================================================== 0BCC- 1100 .OR PROG3 0BCC- 1101 0BCC- 1102 CALCULATE_CARDS_TO_MOVE: 0BCC- 1103 0BCC-C2 23 1104 ( 18) LD MOVE_COUNT(2) 0BCE-CA 21 1105 ( 18) ST COUNT(2) 0BD0- 1106 0BD0- 1107 LOOP7: 0BD0-C4 0B 1108 ( 10) LDI VAR_SWAP/256 ;Swap area currently 0x0BBC 0BD2-35 1109 ( 8) XPAH P1 0BD3-C4 BC 1110 ( 10) LDI VAR_SWAP\256 0BD5-31 1111 ( 8) XPAL P1 0BD6- 1112 0BD6-C2 21 1113 ( 18) LD COUNT(2) 0BD8-01 1114 ( 7) XAE 0BD9-C1 80 1115 ( 18) LD -128(P1) ;Load Card at 0x0B?? 0BDB-CA 25 1116 ( 18) ST CARD(2) 0BDD- 1117 0BDD-D4 0F 1118 ( 10) ANI 0x0F 0BDF-CA 39 1119 ( 18) ST CARD1_VAL(2) 0BE1-C2 25 1120 ( 18) LD CARD(2) 0BE3-D4 10 1121 ( 10) ANI 0x10 ;5th Bit Set for black card 0BE5-CA 3B 1122 ( 18) ST CARD1_BLACK(2) 0BE7- 1123 0BE7- 1124 CHECK_VALUE2: 0BE7-C2 39 1125 ( 18) LD CARD1_VAL(2) 0BE9-F4 01 1126 ( 11) ADI 0x01 0BEB-E2 3A 1127 ( 18) XOR CARD2_VAL(2) 0BED-9C 0C 1128 (9/11) JNZ CHECK_NEXT_CARD 0BEF- 1129 0BEF- 1130 CHECK_COLOUR2: 0BEF-C2 3B 1131 ( 18) LD CARD1_BLACK(2) 0BF1-E2 3C 1132 ( 18) XOR CARD2_BLACK(2) 0BF3-98 06 1133 (9/11) JZ CHECK_NEXT_CARD 0BF5-C4 12 1134 ( 10) LDI 0x12 0BF7-CA 24 1135 ( 18) ST VALID(2) ;Valid Move 0BF9- 1136 0BF9-90 04 1137 ( 11) JMP CALCULATE_CARDS_TO_MOVE_RETURN 0BFB- 1138 0BFB- 1139 CHECK_NEXT_CARD: 0BFB-BA 21 1140 ( 22) DLD COUNT(2) 0BFD-9C D1 1141 (9/11) JNZ LOOP7 0BFF- 1142 0BFF- 1143 CALCULATE_CARDS_TO_MOVE_RETURN: 0BFF-3F 1144 ( 7) RET P3 0C00- 1145 0C00- 1146 ;====================================================================== 0C00- 1147 ;====================================================================== 0C00- 1148 0C00- 1149 0C00- 1150 0C00- 1151 EXEC_ADR: FFFE 1152 .NO 0xFFFE FFFE-04 1153 .DB ENTRY/256 FFFF-00 1154 .DB ENTRY\256 010000- 1155