Previous Next Contents Index
The restart routines 

THE 'POWER UP RESET' RESTART
When the Spectrum is turned on or the reset button is pressed, the +D ROM is paged in at
address 0, i.e. the routine listed here is executed.

0000 POWER_UP   NOP
0001            LD   BC,#0101
0004            NOP
0005            JP   #0533,POWER_UP2     Jump to main routine.

THE 'USE G+DOS' RESTART
This is the main entry point to the +D system; it is paged in when the Z80 reaches
address #0008, that is, the address of the 'main' ROM 'ERROR' routine.

0008 START      LD   HL,(23645)          The address reached by the interpreter
000B            LD   (23647),HL          (CH_ADD) is copied to the error pointer
000E            JR   #0013,START2        (X_PTR) before proceeding.

THE 'CALL A MAIN ROM ROUTINE' RESTART
This routine allows for a subroutine in the 'main' ROM to be called from the 
+D system. It can be called by using a RST #10 instruction, followed by the 
address of the 'main' ROM subroutine.

0010 CALBAS     JP   #04A6,CALBAS_2      Jump forward.

THE 'START_2' ROUTINE

0013 START2     JP   #013B,START_3       Continue with the +D systems main
                                         entry routine.
0016            DEFB #00,#00             Unused locations.

THE 'FLAGS ADDRESS' RESTART
This routine is used by the -BIT- routines at address #15F4, the original HL is saved
and the flags address is loaded into HL.

0018 F_ADDR     EX   (SP),HL             Exchange RETurn address and HL.
0019            PUSH HL                  Re-stack RETurn address.
001A            LD   HL,#3ACF            Address of FLAGS3.
001D            RET
001E            DEFB #00,#00             Unused locations.

THE '+D ERROR' RESTART
A RST #20 followed by an one-byte error code will print the appropriate message, when
the error occurred during the execution of a command code however, the error code will be
returned in the A register with the Carry flag set.

0020 DISC_ERR   LD   HL,(23645)          The address reached by the interpreter
0023            LD   (23647),HL          is copied to the error pointer before
0026            JR   #0035,DISC_ERR2     proceeding.

THE 'NEXT CHAR' RESTART
This routine gets the next character from a BASIC line, it does this by calling the RST
#20 routine in the 'main' ROM.

0028 NEXT_C     RST  #10,CALBAS          Call 'main' ROM 'NEXT_CHAR'.
0029            DEFW #0020,NEXT_CHAR
002B            RET

THE 'GET CHAR' ROUTINE
Get character by calling the 'main' ROM restart.

002C GET_C      RST  #10,CALBAS          Call 'main' ROM 'GET_CHAR'.
002D            DEFW #0018,GET_CHAR
002F            RET

THE 'SYNTAX-Z' RESTART
This corresponds to the 'main' ROM 'SYNTAX-Z' subroutine. A test of bit 7 of FLAGS will
give the Zero flag set during syntax checking, and reset during execution.

0030 SYNTAX_Z   BIT  7,(IY+1)            Test the runtime flag.
0034            RET

THE 'DISC_ERR2' ROUTINE

0035 DISC_ERR2  JP   #182D,D_ERROR       Continue with the +D error routine.

THE 'MASKABLE INTERRUPT' RESTART
While the +D system is paged in, 'nothing' is done during an interrupt.

0038 INT        EI                       Enable interrupts before RETurning.
0039            RET

AN 'UNUSED' SUBROUTINE
This is probably a piece of an older ROM version, it loads HL with (FRAMES) and CALLs
another unused routine at #02E3.

003A            LD   HL,(23672)          Get the two LSBs of FRAMES.
003D            CALL #02E3
0040            OUT  (231),A             Page-out.
0042            DEFB #B5
0043            DEFB #00,#00,#00

THE 'UNPAGE 128 ROM' SUBROUTINE
This routine pages out the +D system and returns to the 128K ROM at address #0049. That
address contains a RET instruction so the effect is a jump to BC with the 128K ROM paged
in.

0046 UNPAGE_BC  PUSH BC                  Stack return address.
0047 UNPAGE_0   OUT  (231),A             Page out +D system.
0049            RET                      ? This statement is not reached from
                                         above.
004A            DEFB #00,#00,#00,#00,#00 Unused locations.

THE 'UNPAGE' SUBROUTINE
This routine pages out the +D system and returns to the 'main' ROM at address #0052.
That address contains a RET instruction so the effect is a jump to HL with the 'main' ROM
paged in.

004F UNPAGE_HL  PUSH HL                  Stack return address.
0050 UNPAGE_1   OUT  (231),A             Page out +D system.
0052            RET

Previous Next Contents Index