Prev: 52190 Up: Map Next: 53806
53674: Demo Entry Point
DemoEntryPoint 53674 DI Disable interrupts.
53675 LD (53806),SP Stash the current stack pointer at *Storage_StackPointer.
53679 LD SP,65530 SP=65530.
Write 253 from InterruptLowOrderByteJumpTable for 256 bytes. All will become clear soon...
53682 LD HL,65024 HL=65024.
53685 LD BC,253 Set a counter in B of 0 (as it's a DJNZ this is really 256) and set C to 253 for the value to write.
WriteInterruptJumpAddress_Loop 53688 LD (HL),C Write 253 to *HL.
53689 INC HL Increment HL by one.
53690 DJNZ WriteInterruptJumpAddress_Loop Decrease counter by one and loop back to WriteInterruptJumpAddress_Loop until counter is zero.
One more for luck...
53692 LD (HL),C Write C to *HL.
This sets interrupt mode 2; when the system generates an interrupt, it'll use the high-order byte set here, together with a low-order byte generated from the system to form a 16-bit address to jump to.
As we've just set 253 to every address, this means that every generated interrupt will jump to 65277 which in turn will jump to 62586.
53693 LD A,254 Set 254 as the high-order byte in I.
53695 LD I,A
53697 IM 2 Interrupt mode 2.
This entry point is used by the routine at StartGame.
DemoEntryPoint_0 53699 DI Disable interrupts.
53700 LD HL,25000 Write 25000 to *54704.
53703 LD (54704),HL
53706 LD BC,0 Write 0000 to:
53709 LD (54672),BC
53713 LD (54673),BC
53717 LD (57552),BC
53721 XOR A Write 0 to *54665.
53722 LD (54665),A
Print the in-game surround.
53725 LD A,5 Set border colour to CYAN.
53727 OUT (254),A
53729 LD HL,49830 HL=Data_PlayareaSurround.
53732 CALL UnpackScreenData Call UnpackScreenData.
Set the starting lives.
53735 LD A,4 Write 4 to *Lives.
53737 LD (54595),A
53740 LD HL,23258 Write 23258 (attribute buffer location) to *54670.
53743 LD (54670),HL
Initialise the new game with the level 1 data.
53746 LD HL,53810 Write Table_LevelData to *Pointer_CurrentLevelData.
53749 LD (53808),HL
Note, this level counter counts down instead of up.
53752 LD B,1 Set a counter in B for the total number of levels (1).
This level counter is used for display purposes.
53754 XOR A Write 0 to *Level.
53755 LD (54666),A
The game loops here in-game to begin a new level.
DemoEntryPoint_1 53758 PUSH BC Stash the level counter on the stack.
53759 LD HL,(53808) HL=*Pointer_CurrentLevelData.
53762 LD E,(HL) DE=current level data pointer.
53763 INC HL
53764 LD D,(HL)
53765 INC HL Increment the level data pointer by one to point to the next level.
53766 LD (53808),HL Write the next level pointer to *Pointer_CurrentLevelData.
53769 EX DE,HL Exchange the DE and HL registers.
53770 LD A,(54666) A=*Level.
53773 INC A Increment A by one.
53774 DAA DAA.
53775 LD (54666),A Write A to *Level.
53778 CALL Game_Initialisation Call Game_Initialisation.
53781 LD A,1 A=1.
53783 POP BC Restore BC from the stack.
53784 PUSH BC Stash BC on the stack.
53785 CALL Print_HelperPreviewImage Call Print_HelperPreviewImage.
53788 CALL Colourise_PreviewGrid Call Colourise_PreviewGrid.
53791 EI Enable interrupts.
53792 CALL StartGame Call StartGame.
53795 POP BC Restore BC from the stack.
53796 DJNZ DemoEntryPoint_1 Decrease counter by one and loop back to DemoEntryPoint_1 until counter is zero.
53798 LD SP,(53806) Restore the original stack pointer from *Storage_StackPointer.
53802 IM 1 Interrupt mode 1.
53804 EI Enable interrupts.
53805 RET Return.
Prev: 52190 Up: Map Next: 53806