.MLOOP LDX #&FF \ Set the stack pointer to &01FF, which is the standard TXS \ location for the 6502 stack, so this instruction \ effectively resets the stack LDX GNTMP \ If the laser temperature in GNTMP is non-zero, BEQ EE20 \ decrement it (i.e. cool it down a bit) DEC GNTMP .EE20 LDX LASCT \ Set X to the value of LASCT, the laser pulse count BEQ NOLASCT \ If X = 0 then jump to NOLASCT to skip reducing LASCT, \ as it can't be reduced any further DEX \ Decrement the value of LASCT in X BEQ P%+3 \ If X = 0, skip the next instruction DEX \ Decrement the value of LASCT in X again STX LASCT \ Store the decremented value of X in LASCT, so LASCT \ gets reduced by 2, but not into negative territory .NOLASCT JSR DIALS \ Call DIALS to update the dashboard BIT printflag \ If bit 7 of printflag is clear (printer output is not \ enabled), jump to dontdolinefeedontheprinternow to \ skip the following (and en route, why not take a \ short moment to admire this, the longest label name in \ the original Elite source code - presumably they got \ longer when development moved to a 6502 second \ processor system, with all that extra memory...) BPL dontdolinefeedontheprinternow LDA #prilf \ Send a #prilf command to the I/O processor to print a JSR OSWRCH \ blank line on the printer JSR OSWRCH .dontdolinefeedontheprinternow STZ printflag \ Set the printflag to 0 to disable printing LDA QQ11 \ If this is a space view, skip the following five BEQ P%+13 \ instructions (i.e. jump to JSR TT17 below) AND PATG \ If PATG = &FF (author names are shown on start-up) LSR A \ and bit 0 of QQ11 is 1 (the current view is type 1), BCS P%+7 \ then skip the following two instructions LDY #2 \ Wait for 2/50 of a second (0.04 seconds), to slow the JSR DELAY \ main loop down a bit JSR TT17 \ Scan the keyboard for the cursor keys or joystick, \ returning the cursor's delta values in X and Y and \ the key pressed in AName: Main game loop (Part 5 of 6) [Show more] Type: Subroutine Category: Main loop Summary: Cool down lasers, make calls to update the dashboard Deep dive: Program flow of the main game loop The dashboard indicatorsContext: See this subroutine in context in the source code Variations: See code variations for this subroutine in the different versions References: This subroutine is called as follows: * Main game loop (Part 2 of 6) calls via MLOOP * Main game loop (Part 3 of 6) calls via MLOOP * Main game loop (Part 4 of 6) calls via MLOOP * Main game loop (Part 6 of 6) calls via MLOOP
This is the first half of the minimal game loop, which we iterate when we are docked. This section covers the following: * Cool down lasers * Make calls to update the dashboard
Other entry points: MLOOP The entry point for the main game loop. This entry point comes after the call to the main flight loop and spawning routines, so it marks the start of the main game loop for when we are docked (as we don't need to call the main flight loop or spawning routines if we aren't in space)
[X]
Subroutine DELAY (category: Utility routines)
Wait for a specified time, in 1/50s of a second
[X]
Subroutine DIALS (category: Dashboard)
Update the dashboard indicators and flight variables by sending a #RDPARAMS command to the I/O processor
[X]
Label EE20 is local to this routine
[X]
Label NOLASCT is local to this routine
[X]
Configuration variable OSWRCH = &FFEE
The address for the OSWRCH routine
[X]
Variable PATG in workspace Parasite variables
Configuration setting to show the author names on the start-up screen and enable manual hyperspace mis-jumps
[X]
Subroutine TT17 (category: Keyboard)
Scan the keyboard for cursor key or joystick movement
[X]
Label dontdolinefeedontheprinternow is local to this routine
[X]
Configuration variable prilf = 147
The OSWRCH number for the #prilf command
[X]
Variable printflag (category: Text)
A flag that determines whether to send text output to the printer as well as the screen