![]() |
Routines |
| Prev: 58266 | Up: Map | Next: 58422 |
|
Used by the routine at CheckCardType.
|
||||
| PrintAceCard | 58296 | SUB 3 | A-=3. | |
| 58298 | DEC B | Decrease B by three. | ||
| 58299 | DEC B | |||
| 58300 | DEC B | |||
|
This entry point is used by the routine at CheckCardType.
|
||||
| PrintNumberCard | 58301 | LD C,B | Copy the original card value into C as we need B for the loop below. | |
| 58302 | LD B,A | Set a counter in B of the card number (this is the lower four bits). | ||
| 58303 | INC B | Increment B by one, due to the way the loop below works. | ||
| 58304 | LD DE,30 | The card UDG data blocks are 0030 in length, so store this in DE for the calculation. | ||
| 58307 | LD HL,58422 | The card data begins from 58422 so store this in HL. | ||
| 58310 | XOR A | Reset the flags. | ||
| 58311 | SBC HL,DE | Subtract DE from HL as the loop will add it back and then it will be pointing to the beginning again. | ||
| FindCardUDGData_Loop | 58313 | ADD HL,DE | Add 0030 to HL to move to the next block of card UDG data. | |
| 58314 | DJNZ FindCardUDGData_Loop | Decrease the card value counter by one and loop back to FindCardUDGData_Loop until the appropriate card UDG data block is found. | ||
| 58316 | LD (58723),HL | Write the card UDG data block pointer to *PointerCardUDGData. | ||
|
Work out the suit.
|
||||
| 58319 | LD B,4 | Using the original card value, shift the upper four bits to be the lower four bits. | ||
| SuitShift_Loop | 58321 | SRL C | ||
| 58323 | DJNZ SuitShift_Loop | |||
| 58325 | LD A,C | Write the calculated suit to *CurrentCardSuit. | ||
| 58326 | LD (58722),A | |||
|
Now calculate the suit UDG data address.
|
||||
| 58329 | LD B,C | Set a counter in B of the calculated suit (this is the upper four bits). | ||
| 58330 | INC B | Increment B by one, due to the way the loop below works. | ||
| 58331 | LD DE,88 | The suit UDG data blocks are 0088 in length, so store this in DE for the calculation. | ||
| 58334 | LD HL,59071 | The suit UDG data begins from 59071 so store this in HL. | ||
| 58337 | XOR A | Reset the flags. | ||
| 58338 | SBC HL,DE | Subtract DE from HL as the loop will add it back and then it will be pointing to the beginning again. | ||
| FindSuitUDGData_Loop | 58340 | ADD HL,DE | Add 0088 to HL to move to the next block of suit UDG data. | |
| 58341 | DJNZ FindSuitUDGData_Loop | Decrease the suit counter by one and loop back to FindSuitUDGData_Loop until the appropriate suit UDG data block is found. | ||
| 58343 | PUSH DE | Set a counter in BC to the length of the suit UDG data block: 0088. | ||
| 58344 | POP BC | |||
| 58345 | LD DE,58983 | Set the target in DE to Buffer_CardData. | ||
| 58348 | LDIR | Copy the suit UDG data block to the card data buffer. | ||
|
Set the card character-set to be the in-use font.
|
||||
| 58350 | LD HL,58207 | Write 58207 to *CHARS. | ||
| 58353 | LD (23606),HL | |||
|
Handle setting the colour of the card.
|
||||
| 58356 | LD A,19 | BRIGHT: ON. | ||
| 58358 | RST 16 | |||
| 58359 | LD A,1 | |||
| 58361 | RST 16 | |||
| 58362 | LD A,16 | Set INK: BLACK. | ||
| 58364 | RST 16 | |||
| 58365 | LD A,0 | |||
| 58367 | RST 16 | |||
| 58368 | LD A,(58722) | Jump to PrintCard if *CurrentCardSuit is 2 or higher (so Spades or Clubs). | ||
| 58371 | CP 2 | |||
| 58373 | JR NC,PrintCard | |||
|
Else this card is a Diamonds or Hearts so set the INK appropriately.
|
||||
| 58375 | LD A,16 | Set INK: RED. | ||
| 58377 | RST 16 | |||
| 58378 | LD A,2 | |||
| 58380 | RST 16 | |||
|
This entry point is used by the routine at CheckCardType.
|
||||
| PrintCard | 58381 | LD A,(59423) | Fetch the current *CardPosition and store this in A. | |
| 58384 | LD C,6 | Each card is 6 character blocks in width, store this count in C. | ||
| 58386 | LD B,A | Set a counter in B of the card position we're processing. | ||
|
Subtract 6 from 38 the number of times for the current card position. For example; position 1 is: 38 - (1 * 6) = 32.
|
||||
| 58387 | LD A,38 | A=38. | ||
| FindCardPosition_Loop | 58389 | SUB C | A-=C. | |
| 58390 | DJNZ FindCardPosition_Loop | Decrease card position counter by one and loop back to FindCardPosition_Loop until the counter is zero. | ||
| 58392 | LD C,A | Store the result in C, this is the column position. | ||
| 58393 | LD B,12 | Set B to 12 this is the row position. | ||
| 58395 | LD DE,(58723) | Retrieve *PointerCardUDGData for the current card. | ||
| PrintCard_Loop | 58399 | PUSH DE | Stash the UDG data pointer on the stack. | |
| 58400 | LD A,B | Jump to PrintCard_Finish when the current print line is equal to 7. | ||
| 58401 | CP 7 | |||
| 58403 | JR Z,PrintCard_Finish | |||
| 58405 | CALL 3554 | Call 3554 (CL_SET) to change the co-ordinates in BC to a screen buffer address. | ||
| 58408 | POP DE | Restore the UDG data pointer from the stack. | ||
| 58409 | PUSH BC | Stash BC on the stack. | ||
| 58410 | LD BC,6 | Set the number of characters to print in BC (0006). | ||
| 58413 | CALL 8252 | Call PR_STRING to print to the screen. | ||
| 58416 | POP BC | Restore BC from the stack. | ||
| 58417 | DEC B | Decrease B by one. | ||
| 58418 | JR PrintCard_Loop | Jump to PrintCard_Loop. | ||
|
Housekeeping and return.
|
||||
| PrintCard_Finish | 58420 | POP DE | Restore DE from the stack. | |
| 58421 | RET | Return. | ||
| Prev: 58266 | Up: Map | Next: 58422 |