![]() |
Routines |
| Prev: B34B | Up: Map | Next: B3AB |
|
Used by the routines at PrintWages and GameOver.
|
||||||||||||
| PrintEarnings | B34C | PUSH HL | Stash HL, BC and DE on the stack. | |||||||||
| B34D | PUSH BC | |||||||||||
| B34E | PUSH DE | |||||||||||
|
Print (or don't print) the equals sign:
|
||||||||||||
| B34F | LD A,$3D | A=3D. | ||||||||||
| B351 | CALL PrintStringColour | Call PrintStringColour. | ||||||||||
|
Move one character block to the right.
|
||||||||||||
| B354 | INC E | Increment E by one. | ||||||||||
|
Print the GBP pounds sign.
|
||||||||||||
| B355 | LD C,$42 | C=42 (INK: RED, PAPER: BLACK (BRIGHT) ). | ||||||||||
| B357 | LD A,$26 | A=26. | ||||||||||
| B359 | CALL PrintStringColour | Call PrintStringColour. | ||||||||||
|
Move one character block to the right.
|
||||||||||||
| B35C | INC E | Increment E by one. | ||||||||||
|
Initialise the leading zero suppression flag. See Flag_MoneyHelper for details.
|
||||||||||||
| B35D | XOR A | Write 00 to Flag_MoneyHelper. | ||||||||||
| B35E | LD ($B34B),A | |||||||||||
|
Set the attribute for all the money digits.
|
||||||||||||
| B361 | LD C,$45 | C=45 (INK: CYAN, PAPER: BLACK (BRIGHT) ). | ||||||||||
|
Money is stored as two digits.
|
||||||||||||
| B363 | LD B,$02 | B=02 (counter). | ||||||||||
|
Fetch the money digit.
|
||||||||||||
| PrintEarnings_Loop | B365 | LD A,(HL) | A=*HL. | |||||||||
| B366 | SRL A | Shift and rotate the upper bits to be the lower bits. | ||||||||||
| B368 | SRL A | |||||||||||
| B36A | SRL A | |||||||||||
| B36C | SRL A | |||||||||||
|
Convert the number into ASCII ready for printing to the screen.
Add ASCII "0" - so for example 01 ends up being 01 + 30 = 31 (e.g. "1" in ASCII).
|
||||||||||||
| B36E | ADD A,$30 | A+=30. | ||||||||||
|
If the resulting number is not zero, then it needs to be printed to the screen.
|
||||||||||||
| B370 | CP $30 | If A is not 30 jump to PrintEarnings_Print_Upper. | ||||||||||
| B372 | JR NZ,PrintEarnings_Print_Upper | |||||||||||
|
And, if it is zero - print it, unless the leading zero suppression flag says otherwise.
|
||||||||||||
| B374 | LD A,($B34B) | If Flag_MoneyHelper is zero jump to PrintEarnings_Skip. | ||||||||||
| B377 | OR A | |||||||||||
| B378 | JR Z,PrintEarnings_Skip | |||||||||||
|
Set the following printed character to be zero:
|
||||||||||||
| B37A | LD A,$30 | A=30. | ||||||||||
| PrintEarnings_Print_Upper | B37C | CALL PrintStringColour | Call PrintStringColour. | |||||||||
|
Indicate that we have written a digit.
|
||||||||||||
| B37F | LD A,$01 | Write 01 to Flag_MoneyHelper. | ||||||||||
| B381 | LD ($B34B),A | |||||||||||
|
Move one character block to the right.
|
||||||||||||
| PrintEarnings_Skip | B384 | INC E | Increment E by one. | |||||||||
|
Refresh the money byte. We've processed the upper bits already and now we want to process the lower bits.
|
||||||||||||
| B385 | LD A,(HL) | A=*HL. | ||||||||||
| B386 | AND %00001111 | Keep only bits 0-3. | ||||||||||
|
As above; add ASCII "0".
|
||||||||||||
| B388 | ADD A,$30 | A+=30. | ||||||||||
|
If the resulting number is not zero, then it needs to be printed to the screen.
|
||||||||||||
| B38A | CP $30 | If A is not 30 jump to PrintEarnings_Print_Lower. | ||||||||||
| B38C | JR NZ,PrintEarnings_Print_Lower | |||||||||||
|
Force some output if everything is zero.
|
||||||||||||
| B38E | LD A,B | If B (the counter) is 01 jump to PrintEarnings_Print_Zero. | ||||||||||
| B38F | CP $01 | |||||||||||
| B391 | JR Z,PrintEarnings_Print_Zero | |||||||||||
|
If nothing has been printed yet just skip to the next money byte.
|
||||||||||||
| B393 | LD A,($B34B) | If Flag_MoneyHelper is zero jump to PrintEarnings_NextByte. | ||||||||||
| B396 | OR A | |||||||||||
| B397 | JR Z,PrintEarnings_NextByte | |||||||||||
|
||||||||||||
| PrintEarnings_Print_Zero | B399 | LD A,$30 | A=30. | |||||||||
| PrintEarnings_Print_Lower | B39B | CALL PrintStringColour | Call PrintStringColour. | |||||||||
| B39E | LD A,$01 | Write 01 to Flag_MoneyHelper. | ||||||||||
| B3A0 | LD ($B34B),A | |||||||||||
|
Move one character block to the right.
|
||||||||||||
| PrintEarnings_NextByte | B3A3 | INC E | Increment E by one. | |||||||||
|
Move onto the next money byte.
|
||||||||||||
| B3A4 | INC HL | Increment HL by one. | ||||||||||
| B3A5 | DJNZ PrintEarnings_Loop | Decrease counter by one and loop back to PrintEarnings_Loop until counter is zero. | ||||||||||
|
Restore all the previous registers and return.
|
||||||||||||
| B3A7 | POP DE | Restore DE, BC and HL from the stack. | ||||||||||
| B3A8 | POP BC | |||||||||||
| B3A9 | POP HL | |||||||||||
| B3AA | RET | Return. | ||||||||||
| Prev: B34B | Up: Map | Next: B3AB |