0000			  ;;;;;;;;;;;THE DISASSEMBLY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000			  ;
0000			  ;  I/O
0000			  CSP1	       EQU     0FEH
0000			  CSP2	       EQU     0FEH
0000			  CSP3	       EQU     0FBH
0000			  ;
0000			  ;  RST   ;
0000			  WR_ERR       EQU     08H
0000			  WR_SCRN      EQU     10H
0000			  GET_BT       EQU     18H
0000			  GET_NBT      EQU     20H
0000			  ;
0000			  CAPS_SH      EQU     27H
0000			  SYMB_SH      EQU     18H
0000			  ;
0000			  CR	       EQU     15O
0000			  ;
0000			  YBASE        EQU     ERR_NR	 ; BASE FOR IY-REG OPERATION
0000			  ;
0000			  ;;;	FLAGS BITS
0000			  SP_ALLOW     EQU     0	 ; BLANK MUST  BE PRINTED
0000			  PR_USED      EQU     1	 ; PRINTER USED
0000			  TOKEN        EQU     2	 ; TOKEN WAS PRESSED IN K-MODE
0000			  C_CHNGD      EQU     3	 ; CURSOR CHANGED IN K-MODE
0000			  ; NOT USED	       4
0000			  NO_KEY       EQU     5	 ; KEY PRESSED
0000			  NUM_VAR      EQU     6
0000			  LIN_EXEC     EQU     7
0000			  ;
0000			  ;;;; FLAGS2 BITS
0000			  CLR_SCRN     EQU     0
0000			  PB_N_EMP     EQU     1
0000			  IN_QUOTE     EQU     2
0000			  CAPS_L       EQU     3	 ; CAPITAL LOCK SET
0000			  CHNL_K       EQU     4
0000			  ;
0000			  ;;;; TV_FLAG
0000			  SCRN_L       EQU     0
0000			  CHNG_MODE    EQU     3
0000			  A_LIST       EQU     4
0000			  CLR_REQ      EQU     5
0000			  ;
0000			  ;;;;	FLAGX
0000			  COMPL_STR    EQU     0
0000			  NEW_VAR      EQU     1
0000			  INPUT_M      EQU     5
0000			  INP_LINE     EQU     7
0000			  ;
0000			  ;;;;;;;;;;;; THE RESTART ROUTINES AND TABLES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000			  ;
0000			  ;;;;;;;;;;;;;;;;;;;;;;;;THE "START";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000			  ; THE MASKABLE INTERRUPT IT DISABLED AND THE 'DE' REGISTER PAIR SET TO HOLD
0000			  ; THE 'TOP OF POSSIBLE RAM'.
0000			  ;
0000					ORG  0
0000 F3 		  START:	DI			      ; DISABLE THE 'KEYBOARD INTERRUPT'.
0001 AF 				XOR   A 		      ; +00 FOR 'START' (BUFF +FF FOR 'NEW').
0002 11FFFF				LD    DE,0FFFFH 	      ; TOP OF POSSIBLE RAM.
0005 C3CB11				JP    START_NEW 	      ; JUMP FORWARD.
0008			  ;;;;;;;;;;;;;;;;;;;;;;;;;THE 'ERROR' RESTART;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0008			  ; THE ERROR POINTER IS MADE TO POINT TO THE POSITION OF THE ERROOR.
0008 2A5D5C		  ERROR_1:	LD    HL,(CH_ADD)	      ; THE ADRRESS REACHED BY THE
000B 225F5C				LD    (X_PTR),HL	      ; INTERPRETER IS COPIED TO THE ERROR
000E 1843				JR    ERROR_2		      ; POINTER BEFORE PROCEEDING.
0010			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'PRINT A CHARACTER' RESTART;;;;;;;;;;;;;;;;;;;
0010			  ; THE 'A' REGISTER HOLDS THE CODE OF THE CHARACTER THAT IS TO BE PRINTED.
0010 C3F215		  PRINT_A_1:	JP    PRINT_A_2 	      ; JUMP FORWARD IMMEDIATELY.
0017					ORG   18H-1		      ; UNUSED LOCATION
0017 00 				DEFB  0
0018			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'COLLECT CHARACTER' RESTART;;;;;;;;;;;;;;;;;;;
0018			  ; THE CONTENTS OF THE LOCATION CURRENTLY ADRRESSED BY CH_ADD ARE FETCHED. A
0018			  ; RETURN IS MADE IF THE VALUE REPRESENTS A PRINTABLE CHARACTER, OTHERWISE
0018			  ; CH_ADD IS INCREMENTED AND THE TESTS REPEATED.
0018 2A5D5C		  GET_CHAR:	LD    HL,(CH_ADD)	      ; FETCH THE VALUE THAT IS ADDRESSED
001B 7E 				LD    A,(HL)		      ; BY CH_ADD.
001C CD7D00		  TEST_CHAR:	CALL  SKIP_OVER 	      ; FIND OUT IF THE CHARACTER IS PRINTABLE.
001F D0 				RET   NC		      ; RETURN IF IT IS SO.
0020			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'COLLECT NEXT CHARCTER' RESTART;;;;;;;;;;;;;;;
0020			  ; AS A BASIC LINE INTERPRITED, THIS ROUTINE IS CALLED REPEATEDLY TO STEP
0020			  ; ALONG THE LINE.
0020 CD7400		  NEXT_CHAR:	CALL  CH_ADD_1		      ; CH_ADD NEEDS TO BE INCREMENTED.
0023 18F7				JR    TEST_CHAR 	      ; JUMP BACK TO TEST THE NEW VALUE.
0028					ORG   28H
0028			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'CALCULATOR' RESTART;;;;;;;;;;;;;;;;;;;;;;;;;;
0028			  ; THE FLOATING-POINT CALCULATOR IS ENTERED AT 335B
0028 C35B33		  FP_CALC:	JP    CALCULATE 	      ; JUMP FORWARD IMMEDIATELY.
0030					ORG   30H		      ; UNUSED LOCATIONS.
0030			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'MAKE BC SPACES' RESTART;;;;;;;;;;;;;;;;;;;;;;
0030			  ; THIS ROUTINE CREATED FREE LOCATIONS IN THE WORK SPACE.THE NUMBER OF
0030			  ; LOCATION IS DETERMINATED BY CURRENT CONTENTS OF THE 'BC'REGISTER PAIR.
0030 C5 		  BC_SPACES:	PUSH  BC		      ; SAVE THE 'NUMBER'.
0031 2A615C				LD    HL,(WORKSP)	      ; FETCH THE PRESENT ADDRESS OF THE START
0034 E5 				PUSH  HL		      ; OF THE WORK SPACE AND ???? THAT
0035 C39E16				JP    RESERVE		      ; ALSO BEFORE PROCEEDING.
0038			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'MASKABLE INTERRUPT'ROUTINE;;;;;;;;;;;;;;;;;;;
0038			  ; THE REAL TIME CLOCK IS INCREMENTED AND THE KEYBOARD SCANNED WHENEVER A
0038			  ; MASKABLE INTERRUPT OCCURS.
0038 F5 		  RST38:	PUSH  AF		      ; SAVE THE CURRENT VALUES HOLD IN
0039 E5 				PUSH  HL		      ; THESE REGISTERS.
003A 2A785C				LD    HL,(FRAMES)	      ; THE LOWER TWO BYTES OF THE
003D 23 				INC   HL		      ; SAME COUNTER ARE INCREMENTED
003E 22785C				LD    (FRAMES),HL	      ; EVERY 20MS.(UK) THE HIGHEST
0041 7C 				LD    A,H		      ; BYTE OF THE FRAME COUNTER IS
0042 B5 				OR    L 		      ; ONLY INCREMENTED WHEN THE
0043 2003				JR    NZ,KEY_INT	      ; VALUE OF THE LOWER TWO BYTES
0045 FD3440				INC   (IY+FRAMES+2-YBASE);    ; IS ZERO.
0048 C5 		  KEY_INT:	PUSH  BC		      ; SAVE THE CURRENT VALUES HELD
0049 D5 				PUSH  DE		      ; IN THIS REGISTERS.
004A CDBF02				CALL  KEYBOARD		      ; NOW SCAN THE KEYBOARD.
004D D1 				POP   DE		      ;
004E C1 				POP   BC		      ;
004F E1 				POP   HL		      ;
0050 F1 				POP   AF		      ;
0051 FB 				EI			      ; THE MASKABLE INTERRUPT IS ENABLED
0052 C9 				RET			      ; BEFORE RETURNING.
0053			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'ERROR-2' ROUTINE;;;;;;;;;;;;;;;;;;;;;;;;;
0053			  ; THE RETURN ADDRESS TO THE INTERPRETER POINTS TO THE 'DEFB' THAT SIGNIFIES
0053			  ; WHICH ERROR HAS OCCURRED. THIS 'DEFB' IS FETCHED AND TRANSFERED TO ERR_NR.
0053			  ; THE MACHINE STACK IS CLEARED BEFORE JUMPING FORWARD TO CLEAR THE
0053			  ; CALCULATOR STACK.
0053 E1 		  ERROR_2:	POP   HL		      ; THE ADDRESS ON THE STACK POINTS
0054 6E 				LD    L,(HL)		      ; TO THE ERROR CODE
0055			  ;
0055 FD7500		  ERROR_3:	LD    (IY+ERR_NR-YBASE),L     ; IT IS TRANSFERED TO ERR_NR.
0058 ED7B3D5C				LD    SP,(ERR_SP)	      ; THE MACHINE IS CLEARED BEFORE
005C C3C516				JP    SET_STK		      ; EXITING VIA SET_STK.
005F			  ;;;;;;;;;
0066					ORG   66H		      ; UNUSED LOCATION.
0066			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'NON-MASKABLE INTERRUPT'ROUTINE;;;;;;;;;;;;
0066			  ; THIS ROUTINE IS NOT USED IN THE STANDART SPECTRUME BUT THE CODE ALLOWS FOR
0066			  ; A SYSTEM RESET TO OCCUR FOLOWING ACTIVATION OF THE 'NMI' LINE. THE SYSTEM
0066			  ; VARIABLE AT 5CB0,NAMED HERE 'NMIADD',HAS TO HAVE THE VALUE ZERO FOR THE
0066			  ; RESET TO OCCUR.
0066 F5 		  RESET:	PUSH  AF		      ; SAVE THE CURRENT VALUES HELD
0067 E5 				PUSH  HL		      ; IN THESE REGISTERS.
0068 2AB05C				LD    HL,(NMIADD)	      ; THE TWO BYTES OF 'NMIADD'
006B 7C 				LD    A,H		      ; MUST BOTH BE ZERO FOR THE RESET
006C B5 				OR    L 		      ; TO OCCUR.
006D 2001				JR    NZ,NO_RESET	      ; NOTE:THIS SHOULD HAVE BEEN 'JR Z'!
006F E9 				JP    (HL)		      ; JUMP TO START.
0070 E1 		  NO_RESET:	POP   HL		      ; RESTORE THE CURRENT VALUES TO
0071 F1 				POP   AF		      ; THESE REGISTERS END RETURN.
0072 ED45				RETN			      ;
0074			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'CH_ADD+1' SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;
0074			  ; THE ADDRESS HELD IN CH_ADD IS FETCHED,INCREMENTED END RESTORED.THE
0074			  ; CONTENTS OF THE LOCATION NOW ADDRESSED BY CH_ADD IS FETCHED. THE ENTRY
0074			  ; POINTS OF TEMP_PTR1 AND TEMP_PTR2 ARE USED TO SET  CH_ADD FOR A
0074			  ; TEMPORARY PERIOD.
0074 2A5D5C		  CH_ADD_1:	LD    HL,(CH_ADD)	      ; FETCH THE ADDRESS.
0077 23 		  TEMP_PTR1:	INC   HL		      ; INCREMENT THE POINTER.
0078 225D5C		  TEMP_PTR2:	LD    (CH_ADD),HL	      ; SETCH_ADD.
007B 7E 				LD    A,(HL)		      ; FETCH THE ADDRESSED VALUE AND
007C C9 				RET			      ; THEN RETURN.
007D			  ;;;;;;;;;;;;;;;;;;;;;;;;;;THE 'SKIP-OVER' SUBROUTINE;;;;;;;;;;;;;;;;;;;;;;;
007D			  ; THE VALUE BROUGHT TO THE SUBROUTINE IN THE 'A' RESTER IS TESTED TO SEE IF
007D			  ; IT IS PRINTABLE. VARIOUS SPECIAL CODES LEAD TO 'HL' BEING INCREMENTEED
007D			  ; ONCE,OR TWICE AND CH_ADD EMBEDED ACCORDINGLY.
007D FE21		  SKIP_OVER:	CP   21H		      ; RETURN WITH THE CARRY FLAG RESET.
007F D0 				RET   NC		      ; IF ORDINARY CHARACTER CODE
0080 FE0D				CP    CR		      ; RETURN IF THE END OF THE LINE
0082 C8 				RET   Z 		      ; HAS BEEN REACHED
0083 FE10				CP    10H		      ; RETURN WITH CODE.
0085 D8 				RET   C 		      ; BUT WITH CARRY SET.
0086 FE18				CP    18H		      ; RETURN WITH CODES +18 TO +20
0088 3F 				CCF			      ; AGAIN WITH CARRY SET.
0089 D8 				RET   C 		      ;
008A 23 				INC   HL		      ; SKIP-OVER ONCE.
008B FE16				CP    16H		      ;        ; JUMP FORWARD WITH CODES +10
008D 3801				JR    C,SKIPS		      ; TO +15 (INK TO OVER).
008F 23 				INC   HL		      ; SKIP-OVER ONCE MORE (AT&TAB).
0090 37 		  SKIPS:	SCF			      ; RETUR WITH THE CARRY FLAG SET
0091 225D5C				LD    (CH_ADD),HL	      ; AND CH_ADD HOLDING THE
0094 C9 				RET			      ; APPRORARIATE ADDRESS.

                                                                                                                                                                                                                                                                                                                                                  