commit ad443b4b5a3850e130a8962fcd0a1002bed559e9
parent 3e5d2faac223164a0a12c25510ddc6fe4392e3d7
Author: Brian Swetland <swetland@frotz.net>
Date:   Thu, 18 Aug 2022 22:37:22 -0700
remove extra G007 rom image at the end
Diffstat:
| M | zx81plus.asm |  |  | 3577 | +------------------------------------------------------------------------------ | 
1 file changed, 1 insertion(+), 3576 deletions(-)
diff --git a/zx81plus.asm b/zx81plus.asm
@@ -12066,3582 +12066,7 @@ char_set	; - begins with space character.
 	DEFB	%00000000
 
 
-;	.END				;TASM assembler instruction.
-
-
-
 ;
 ; This marks the end of the ZX81 ROM.
-;
-; As a bonus feature, I will now include the code for
-; the G007 graphics board and
-; the ZX81 monitor
-;
-; The 8K space divides into four 2K spaces like so:
-;
-; 2000 RAM (1K or 2K) remapped
-; 2800 G007 ROM
-; 3000 
-; 3800 ZX81 Monitor
-;
-; The G007 uses some RAM
-; 2300 G007 RAM variables
-;
-; 2000
-#code   $2000,$0800
-; RAM_2K
-; 2300
-; xxxx    data    4           ; reserves 4 bytes from the #data segment for variable "Toto"
-
-#code   $2800,$0800
-
-#if 0
-;
-; just copy bytes. Provides a reference for comparing code output.
-;
-;	G007 Graphics
-;	Start = 2800H
-;	End = 2FFFH
-mark_2800:	DEFB	$2A, $23, $23, $3A, $25, $23, $67, $EB
-mark_2808:	DEFB	$3A, $18, $23, $3D, $92, $57, $3E, $07
-mark_2810:	DEFB	$A3, $6F, $26, $2D, $7E, $2A, $08, $23
-mark_2818:	DEFB	$4A, $06, $00, $09, $09, $CB, $3A, $CB
-mark_2820:	DEFB	$1B, $CB, $3A, $CB, $1B, $CB, $3A, $CB
-mark_2828:	DEFB	$1B, $19, $47, $C9, $3A, $21, $23, $2A
-mark_2830:	DEFB	$27, $23, $ED, $5B, $23, $23, $D9, $2A
-mark_2838:	DEFB	$25, $23, $ED, $5B, $29, $23, $CB, $77
-mark_2840:	DEFB	$28, $1C, $CB, $7F, $C0, $3A, $21, $40
-mark_2848:	DEFB	$F5, $06, $08, $0F, $FD, $CB, $21, $16
-mark_2850:	DEFB	$10, $F9, $EB, $D9, $EB, $D9, $CD, $5E
-mark_2858:	DEFB	$28, $F1, $32, $21, $40, $C9, $01, $DE
-mark_2860:	DEFB	$FF, $3A, $18, $23, $3D, $93, $ED, $52
-mark_2868:	DEFB	$F2, $76, $28, $01, $22, $00, $7B, $D5
-mark_2870:	DEFB	$19, $EB, $B7, $ED, $52, $D1, $E5, $63
-mark_2878:	DEFB	$5F, $D9, $01, $FB, $28, $7D, $D9, $6F
-mark_2880:	DEFB	$D9, $B7, $ED, $52, $F2, $90, $28, $01
-mark_2888:	DEFB	$04, $29, $2F, $19, $EB, $B7, $ED, $52
-mark_2890:	DEFB	$ED, $43, $1A, $23, $D1, $B7, $ED, $52
-mark_2898:	DEFB	$19, $30, $09, $EB, $01, $F6, $28, $D9
-mark_28A0:	DEFB	$53, $5F, $7A, $D9, $ED, $43, $1C, $23
-mark_28A8:	DEFB	$D9, $57, $D5, $D9, $C1, $3A, $21, $23
-mark_28B0:	DEFB	$FE, $40, $30, $02, $45, $4B, $04, $0C
-mark_28B8:	DEFB	$CB, $3C, $38, $02, $28, $08, $CB, $1D
-mark_28C0:	DEFB	$CB, $3A, $CB, $1B, $18, $F2, $55, $CB
-mark_28C8:	DEFB	$3D, $D9, $C5, $CD, $07, $28, $D1, $3A
-mark_28D0:	DEFB	$1F, $23, $4F, $FD, $CB, $21, $06, $38
-mark_28D8:	DEFB	$08, $3A, $1E, $23, $AE, $B1, $A0, $AE
-mark_28E0:	DEFB	$77, $D9, $7D, $05, $C8, $93, $30, $0A
-mark_28E8:	DEFB	$0D, $C8, $82, $D9, $19, $D9, $2A, $1A
-mark_28F0:	DEFB	$23, $E9, $2A, $1C, $23, $E9, $6F, $D9
-mark_28F8:	DEFB	$19, $18, $D8, $6F, $D9, $CB, $00, $30
-mark_2900:	DEFB	$D2, $2B, $18, $CF, $6F, $D9, $CB, $08
-mark_2908:	DEFB	$30, $C9, $23, $18, $C6, $2A, $A8, $0E
-mark_2910:	DEFB	$E9, $CD, $0D, $29, $38, $0E, $21, $00
-mark_2918:	DEFB	$00, $28, $06, $ED, $42, $F8, $C8, $18
-mark_2920:	DEFB	$03, $ED, $4A, $F0, $E1, $C9, $CD, $11
-mark_2928:	DEFB	$29, $22, $25, $23, $CD, $11, $29, $E5
-mark_2930:	DEFB	$CD, $02, $0C, $C1, $ED, $5B, $25, $23
-mark_2938:	DEFB	$28, $0C, $3D, $C0, $21, $9C, $0C, $22
-mark_2940:	DEFB	$30, $40, $43, $C3, $B2, $0B
-; The Plot Routine:
-; A == the plot number N
-; BC == screen X
-; DE == screen Y
-mark_2946:	DEFB	$B7, $28
-mark_2948:	DEFB	$F9, $3D, $D5, $C5, $F5, $CD, $1F, $2E
-mark_2950:	DEFB	$F1, $D1, $C1, $FE, $81, $20, $0F, $ED
-mark_2958:	DEFB	$53, $30, $23, $ED, $43, $32, $23, $01
-mark_2960:	DEFB	$00, $00, $50, $58, $3E, $0B, $CB, $57
-mark_2968:	DEFB	$28, $09, $2A, $29, $23, $E5, $2A, $27
-mark_2970:	DEFB	$23, $18, $07, $2A, $32, $23, $E5, $2A
-mark_2978:	DEFB	$30, $23, $B7, $ED, $5A, $D1, $E8, $22
-mark_2980:	DEFB	$23, $23, $EB, $B7, $ED, $4A, $E8, $22
-mark_2988:	DEFB	$25, $23, $5F, $3E, $C0, $A4, $E0, $3E
-mark_2990:	DEFB	$C0, $A2, $E0, $D9, $E5, $D5, $C5, $CD
-mark_2998:	DEFB	$9F, $29, $C1, $D1, $E1, $D9, $C9, $D9
-mark_29A0:	DEFB	$7C, $B2, $37, $20, $05, $3A, $18, $23
-mark_29A8:	DEFB	$3D, $BD, $3A, $21, $23, $1F, $32, $21
-mark_29B0:	DEFB	$23, $7B, $CB, $7F, $28, $04, $2A, $10
-mark_29B8:	DEFB	$23, $E9, $F5, $E6, $03, $1F, $3D, $2F
-mark_29C0:	DEFB	$67, $9F, $6F, $22, $1E, $23, $E5, $CB
-mark_29C8:	DEFB	$5B, $20, $28, $3A, $20, $23, $AB, $E6
-mark_29D0:	DEFB	$FB, $28, $0F, $21, $34, $23, $7B, $07
-mark_29D8:	DEFB	$07, $07, $E6, $03, $85, $6F, $7E, $32
-mark_29E0:	DEFB	$21, $40, $CD, $2C, $28, $E1, $FD, $CB
-mark_29E8:	DEFB	$21, $0E, $38, $26, $7C, $A5, $28, $22
-mark_29F0:	DEFB	$2C, $5D, $E5, $3A, $21, $23, $CB, $6B
-mark_29F8:	DEFB	$20, $3D, $CB, $73, $20, $3E, $E1, $CB
-mark_2A00:	DEFB	$7F, $20, $0F, $E5, $CD, $00, $28, $A6
-mark_2A08:	DEFB	$32, $17, $23, $D1, $7E, $B2, $AB, $A0
-mark_2A10:	DEFB	$AE, $77, $F1, $32, $20, $23, $21, $2A
-mark_2A18:	DEFB	$23, $11, $2E, $23, $01, $08, $00, $CB
-mark_2A20:	DEFB	$67, $28, $11, $3A, $21, $23, $E6, $C0
-mark_2A28:	DEFB	$17, $30, $02, $CB, $F7, $32, $21, $23
-mark_2A30:	DEFB	$2E, $26, $0E, $04, $ED, $B8, $C9, $21
-mark_2A38:	DEFB	$FF, $FF, $18, $03, $2A, $0A, $23, $D9
-mark_2A40:	DEFB	$E6, $E0, $C2, $AD, $0E, $21, $21, $23
-mark_2A48:	DEFB	$FD, $36, $21, $55, $06, $03, $23, $23
-mark_2A50:	DEFB	$5E, $23, $23, $56, $D5, $10, $F7, $C1
-mark_2A58:	DEFB	$D1, $E1, $B7, $28, $02, $44, $4D, $78
-mark_2A60:	DEFB	$BC, $30, $03, $C5, $E3, $C1, $7C, $BA
-mark_2A68:	DEFB	$30, $01, $EB, $7A, $D9, $E6, $07, $3C
-mark_2A70:	DEFB	$47, $7C, $CB, $05, $07, $07, $07, $10
-mark_2A78:	DEFB	$F9, $67, $22, $38, $23, $D9, $7C, $B8
-mark_2A80:	DEFB	$3E, $07, $30, $03, $C5, $E3, $C1, $EB
-mark_2A88:	DEFB	$F5, $79, $D9, $67, $6F, $4F, $22, $1A
-mark_2A90:	DEFB	$23, $06, $FE, $D9, $93, $D9, $30, $04
-mark_2A98:	DEFB	$06, $00, $ED, $44, $57, $D9, $7A, $90
-mark_2AA0:	DEFB	$D9, $67, $BA, $30, $02, $EB, $04, $6C
-mark_2AA8:	DEFB	$2C, $5C, $CB, $3B, $F1, $0F, $30, $09
-mark_2AB0:	DEFB	$E5, $D5, $C5, $0F, $D9, $38, $CD, $18
-mark_2AB8:	DEFB	$CE, $D9, $60, $2E, $01, $C1, $D1, $E3
-mark_2AC0:	DEFB	$2D, $20, $16, $2A, $1A, $23, $79, $BC
-mark_2AC8:	DEFB	$38, $01, $67, $BD, $30, $01, $6F, $22
-mark_2AD0:	DEFB	$1A, $23, $E1, $2D, $28, $E7, $E5, $18
-mark_2AD8:	DEFB	$15, $7B, $92, $38, $0A, $5F, $CB, $40
-mark_2AE0:	DEFB	$28, $0C, $79, $80, $4F, $18, $D9, $84
-mark_2AE8:	DEFB	$5F, $3E, $01, $B0, $81, $4F, $79, $D9
-mark_2AF0:	DEFB	$FD, $CB, $21, $0E, $38, $CA, $E3, $D5
-mark_2AF8:	DEFB	$C5, $E5, $ED, $5B, $1A, $23, $47, $B9
-mark_2B00:	DEFB	$30, $02, $41, $4F, $ED, $43, $1A, $23
-mark_2B08:	DEFB	$79, $BB, $3C, $38, $01, $7B, $6F, $7A
-mark_2B10:	DEFB	$B8, $30, $02, $78, $3D, $95, $3C, $F5
-mark_2B18:	DEFB	$CD, $07, $28, $F1, $4F, $EB, $21, $39
-mark_2B20:	DEFB	$23, $7E, $07, $07, $07, $77, $2B, $CB
-mark_2B28:	DEFB	$06, $B6, $2A, $1E, $23, $AD, $2F, $6F
-mark_2B30:	DEFB	$EB, $7B, $AE, $B2, $A0, $AE, $77, $0D
-mark_2B38:	DEFB	$20, $14, $E1, $24, $CB, $7D, $28, $94
-mark_2B40:	DEFB	$E1, $E1, $E1, $E1, $7C, $A5, $CA, $12
-mark_2B48:	DEFB	$2A, $2C, $E5, $C3, $45, $2A, $CB, $18
-mark_2B50:	DEFB	$30, $DF, $23, $41, $79, $E6, $07, $4F
-mark_2B58:	DEFB	$CB, $38, $CB, $38, $CB, $38, $28, $08
-mark_2B60:	DEFB	$7B, $AE, $B2, $AE, $77, $23, $10, $F8
-mark_2B68:	DEFB	$37, $0C, $18, $CB, $2A, $13, $23, $2D
-mark_2B70:	DEFB	$B5, $C2, $09, $08, $25, $C2, $B8, $23
-mark_2B78:	DEFB	$3A, $21, $23, $17, $D8, $00, $00, $2A
-mark_2B80:	DEFB	$28, $23, $3A, $27, $23, $CB, $72, $20
-mark_2B88:	DEFB	$05, $6F, $C6, $08, $30, $0D, $7C, $D6
-mark_2B90:	DEFB	$08, $30, $04, $3A, $18, $23, $3D, $32
-mark_2B98:	DEFB	$29, $23, $AF, $32, $27, $23, $CB, $72
-mark_2BA0:	DEFB	$C0, $CD, $EF, $2E, $7D, $FE, $F9, $38
-mark_2BA8:	DEFB	$02, $1E, $02, $2F, $E6, $07, $3C, $57
-mark_2BB0:	DEFB	$7C, $3C, $D9, $57, $D9, $D5, $CD, $07
-mark_2BB8:	DEFB	$28, $D9, $79, $AE, $D9, $EB, $C1, $C5
-mark_2BC0:	DEFB	$6F, $26, $00, $29, $10, $FD, $EB, $06
-mark_2BC8:	DEFB	$02, $3A, $7B, $40, $AE, $FD, $B6, $7C
-mark_2BD0:	DEFB	$A2, $AE, $0D, $28, $01, $77, $53, $23
-mark_2BD8:	DEFB	$10, $EF, $0E, $20, $09, $D9, $23, $15
-mark_2BE0:	DEFB	$28, $02, $10, $D6, $E1, $C3, $9A, $29
-mark_2BE8:	DEFB	$ED, $57, $0F, $30, $08, $AF, $32, $22
-mark_2BF0:	DEFB	$40, $3C, $32, $13, $23, $CD, $CF, $0A
-mark_2BF8:	DEFB	$AF, $32, $13, $23, $FD, $36, $22, $02
-mark_2C00:	DEFB	$4F, $C9, $CD, $A0, $0C, $DA, $AD, $0E
-mark_2C08:	DEFB	$0E, $01, $C8, $0E, $FF, $C9, $FD, $46
-mark_2C10:	DEFB	$22, $0E, $21, $CD, $18, $09, $CD, $9B
-mark_2C18:	DEFB	$09, $7E, $12, $FD, $34, $3A, $2A, $0C
-mark_2C20:	DEFB	$40, $23, $54, $5D, $ED, $B1, $C3, $5D
-mark_2C28:	DEFB	$0A, $8B, $8D, $2D, $7F, $81, $49, $75
-mark_2C30:	DEFB	$5F, $40, $42, $2B, $17, $1F, $37, $52
-mark_2C38:	DEFB	$45, $0F, $6D, $2B, $44, $2D, $5A, $3B
-mark_2C40:	DEFB	$4C, $45, $0D, $52, $54, $4D, $15, $6A
-mark_2C48:	DEFB	$01, $14, $02, $06, $00, $81, $0E, $06
-mark_2C50:	DEFB	$DE, $05, $AB, $0D, $06, $00, $B5, $0E
-mark_2C58:	DEFB	$00, $DC, $0C, $00, $D8, $0E, $04, $14
-mark_2C60:	DEFB	$06, $DF, $06, $05, $B9, $0D, $04, $00
-mark_2C68:	DEFB	$2E, $0E, $05, $E8, $2B, $01, $00, $E9
-mark_2C70:	DEFB	$0E, $05, $A7, $2E, $05, $6A, $0D, $00
-mark_2C78:	DEFB	$C3, $03, $03, $AF, $0E, $03, $30, $07
-mark_2C80:	DEFB	$06, $1A, $06, $00, $92, $0E, $03, $6C
-mark_2C88:	DEFB	$0E, $05, $40, $03, $05, $4D, $2F, $00
-mark_2C90:	DEFB	$7C, $0E, $00, $B2, $0E, $03, $4E, $2E
-mark_2C98:	DEFB	$06, $1A, $06, $1A, $06, $00, $26, $29
-mark_2CA0:	DEFB	$2A, $A8, $0E, $E9, $00, $0E, $0C, $06
-mark_2CA8:	DEFB	$00, $AE, $2E, $03, $B2, $2E, $03, $B6
-mark_2CB0:	DEFB	$2E, $03, $53, $2F, $05, $CB, $0A, $03
-mark_2CB8:	DEFB	$2C, $07, $FD, $36, $01, $01, $CD, $73
-mark_2CC0:	DEFB	$0A, $CD, $95, $0A, $21, $00, $40, $36
-mark_2CC8:	DEFB	$FF, $21, $2D, $40, $CB, $6E, $28, $0E
-mark_2CD0:	DEFB	$FE, $E3, $7E, $C2, $6F, $0D, $CD, $A6
-mark_2CD8:	DEFB	$0D, $C8, $CF, $0C, $CF, $08, $DF, $06
-mark_2CE0:	DEFB	$00, $FE, $76, $C8, $4F, $E7, $79, $D6
-mark_2CE8:	DEFB	$E1, $38, $3B, $4F, $21, $29, $0C, $09
-mark_2CF0:	DEFB	$4E, $09, $18, $03, $2A, $30, $40, $7E
-mark_2CF8:	DEFB	$23, $22, $30, $40, $01, $F4, $0C, $C5
-;
-; bits shifting right within a byte:
-;
-mark_2D00:	DEFB	$80, $40, $20, $10, $08, $04, $02, $01
-;
-mark_2D08:	DEFB	$CD, $F7, $2B, $C3, $07, $02, $32, $28
-mark_2D10:	DEFB	$40, $EB, $21, $0A, $00, $39, $7E, $3C
-mark_2D18:	DEFB	$E6, $F0, $D6, $D0, $4F, $23, $7E, $D6
-mark_2D20:	DEFB	$04, $B1, $4F, $3A, $3B, $40, $07, $9F
-mark_2D28:	DEFB	$A1, $20, $10, $2A, $10, $40, $01, $DF
-mark_2D30:	DEFB	$FF, $09, $CB, $FC, $22, $04, $23, $3E
-mark_2D38:	DEFB	$01, $18, $0E, $2A, $0C, $40, $ED, $4B
-mark_2D40:	DEFB	$00, $23, $09, $CB, $FC, $22, $06, $23
-mark_2D48:	DEFB	$AF, $32, $19, $23, $2B, $7E, $EB, $C9
-mark_2D50:	DEFB	$3A, $19, $23, $3D, $C2, $73, $2D, $3E
-mark_2D58:	DEFB	$1E, $ED, $47, $ED, $6A, $2A, $04, $23
-mark_2D60:	DEFB	$01, $08, $01, $3E, $FE, $CD, $B5, $02
-mark_2D68:	DEFB	$3E, $1F, $ED, $47, $3A, $28, $40, $D6
-mark_2D70:	DEFB	$08, $18, $04, $2B, $3A, $28, $40, $4F
-mark_2D78:	DEFB	$DD, $E1, $FD, $CB, $3B, $7E, $C2, $9D
-mark_2D80:	DEFB	$02, $3E, $FE, $06, $01, $21, $9A, $2D
-mark_2D88:	DEFB	$CD, $95, $2D, $29, $00, $5F, $2A, $06
-mark_2D90:	DEFB	$23, $CB, $FC, $DD, $E9, $ED, $4F, $3E
-mark_2D98:	DEFB	$DD, $FB, $76, $21, $00, $22, $3E, $24
-mark_2DA0:	DEFB	$36, $01, $35, $28, $02, $CF, $1A, $23
-mark_2DA8:	DEFB	$BC, $20, $F5, $65, $11, $00, $20, $01
-mark_2DB0:	DEFB	$00, $01, $ED, $B0, $24, $14, $04, $ED
-mark_2DB8:	DEFB	$B0, $21, $F1, $07, $11, $A0, $23, $01
-mark_2DC0:	DEFB	$60, $00, $ED, $B0, $16, $20, $21, $B4
-mark_2DC8:	DEFB	$2F, $46, $18, $04, $5E, $23, $7E, $12
-mark_2DD0:	DEFB	$23, $10, $F9, $14, $CB, $52, $28, $F1
-mark_2DD8:	DEFB	$C9
-
-; Delete Display File:
-
-mark_2DD9:	DEFB	$CD, $E7, $02, $21, $87, $3E, $CD
-mark_2DE0:	DEFB	$D8, $09, $C0, $EB, $2A, $29, $40, $CB
-mark_2DE8:	DEFB	$76, $28, $04, $ED, $53, $29, $40, $2A
-mark_2DF0:	DEFB	$0C, $40, $C3, $5D, $0A, $CD, $D9, $2D
-mark_2DF8:	DEFB	$01, $92, $19, $2A, $0C, $40, $2B, $CD
-mark_2E00:	DEFB	$9E, $09, $3E, $76, $12, $13, $12, $23
-mark_2E08:	DEFB	$23, $36, $3E, $23, $36, $87, $23, $36
-mark_2E10:	DEFB	$8D, $23, $36, $19, $23, $77, $23, $77
-mark_2E18:	DEFB	$CD, $07, $02, $3E, $01, $18, $37
-; Check & Set Up Display File:
-mark_2E1F:	DEFB	$2A
-mark_2E20:	DEFB	$65, $22, $11, $D9, $BF, $19, $3A, $64
-mark_2E28:	DEFB	$22, $D6, $21, $B4, $B5, $C4, $9B, $2D
-mark_2E30:	DEFB	$2A, $0C, $40, $3E, $76, $2B, $2B, $BE
-mark_2E38:	DEFB	$C4, $F5, $2D, $2A, $0C, $40, $ED, $5B
-mark_2E40:	DEFB	$00, $23, $19, $22, $06, $23, $11, $09
-mark_2E48:	DEFB	$00, $19, $22, $08, $23, $C9, $CD, $02
-mark_2E50:	DEFB	$0C, $C0
-; Clear The Screen:
-mark_2E52:	DEFB	$3D, $FA, $2A, $0A, $F5, $CD
-mark_2E58:	DEFB	$1F, $2E, $F1, $FE, $02, $ED, $4B, $18
-mark_2E60:	DEFB	$23, $2A, $0C, $40, $30, $30, $3D, $23
-mark_2E68:	DEFB	$22, $0E, $40, $2B, $2B, $2B, $1E, $00
-mark_2E70:	DEFB	$06, $10, $2B, $73, $2B, $73, $2B, $77
-mark_2E78:	DEFB	$2B, $77, $10, $FA, $0D, $20, $F1, $06
-mark_2E80:	DEFB	$09, $3E, $01, $2B, $73, $10, $FC, $21
-mark_2E88:	DEFB	$34, $23, $06, $14, $3D, $28, $F4, $21
-mark_2E90:	DEFB	$21, $18, $22, $39, $40, $C9, $C0, $2B
-mark_2E98:	DEFB	$2B, $06, $20, $2B, $2B, $2B, $7E, $2F
-mark_2EA0:	DEFB	$77, $10, $FA, $0D, $20, $F3, $C9, $2A
-mark_2EA8:	DEFB	$96, $0A, $3E, $4D, $18, $35, $3E, $DD
-mark_2EB0:	DEFB	$18, $2E, $3E, $D6, $18, $02, $3E, $CE
-mark_2EB8:	DEFB	$F5, $CD, $02, $0C, $06, $1E, $3D, $FE
-mark_2EC0:	DEFB	$06, $30, $19, $CB, $3F, $67, $28, $02
-mark_2EC8:	DEFB	$3E, $01, $F5, $9F, $6F, $CB, $8C, $25
-mark_2ED0:	DEFB	$22, $7B, $40, $CD, $1F, $2E, $06, $1F
-mark_2ED8:	DEFB	$F1, $32, $14, $23, $78, $ED, $47, $F1
-mark_2EE0:	DEFB	$2A, $71, $0D, $85, $6F, $E9, $57, $3A
-mark_2EE8:	DEFB	$39, $40, $E6, $80, $C3, $6C, $2B, $7A
-mark_2EF0:	DEFB	$D1, $D9, $E5, $D5, $C5, $2A, $0C, $23
-mark_2EF8:	DEFB	$87, $30, $0B, $2A, $0E, $23, $CB, $77
-mark_2F00:	DEFB	$28, $04, $2A, $15, $23, $3F, $EB, $6F
-mark_2F08:	DEFB	$26, $00, $9F, $4F, $3A, $7B, $40, $2F
-mark_2F10:	DEFB	$FD, $A6, $7C, $A9, $4F, $29, $29, $19
-mark_2F18:	DEFB	$06, $08, $D9, $D5, $C9, $FD, $35, $39
-mark_2F20:	DEFB	$3E, $18, $90, $47, $87, $87, $87, $6F
-mark_2F28:	DEFB	$3A, $18, $23, $95, $D8, $3E, $21, $91
-mark_2F30:	DEFB	$4F, $26, $00, $29, $09, $ED, $4B, $08
-mark_2F38:	DEFB	$23, $09, $CD, $EF, $2E, $01, $22, $00
-mark_2F40:	DEFB	$D9, $79, $AE, $D9, $77, $09, $D9, $23
-mark_2F48:	DEFB	$10, $F7, $C3, $9A, $29, $CD, $D9, $2D
-mark_2F50:	DEFB	$C3, $F6, $02, $CD, $02, $0C, $C0, $3D
-mark_2F58:	DEFB	$FA, $69, $08, $CD, $1F, $2E, $CD, $E7
-mark_2F60:	DEFB	$02, $3A, $18, $23, $47, $2A, $08, $23
-mark_2F68:	DEFB	$AF, $5F, $D3, $FB, $3E, $7F, $DB, $FE
-mark_2F70:	DEFB	$0F, $D2, $86, $08, $DB, $FB, $87, $FA
-mark_2F78:	DEFB	$AD, $2F, $30, $F0, $0E, $20, $C5, $4E
-mark_2F80:	DEFB	$06, $08, $CB, $01, $1F, $B3, $57, $DB
-mark_2F88:	DEFB	$FB, $1F, $30, $FB, $7A, $D3, $FB, $10
-mark_2F90:	DEFB	$F1, $23, $C1, $0D, $20, $E8, $23, $23
-mark_2F98:	DEFB	$3E, $03, $B8, $38, $02, $5F, $1D, $DB
-mark_2FA0:	DEFB	$FB, $1F, $30, $FB, $7B, $D3, $FB, $10
-mark_2FA8:	DEFB	$C3, $3E, $04, $D3, $FB, $C3, $07, $02
-mark_2FB0:	DEFB	$FB, $10, $C3, $3E, $0A, $12, $A0, $13
-mark_2FB8:	DEFB	$23, $15, $A4, $16, $23, $40, $C1, $60
-mark_2FC0:	DEFB	$08, $61, $2D, $75, $06, $76, $23, $01
-mark_2FC8:	DEFB	$0A, $54, $02, $85, $C1, $7F, $73, $80
-mark_2FD0:	DEFB	$2D, $8D, $50, $8E, $2D, $E3, $C3, $E4
-mark_2FD8:	DEFB	$0E, $E5, $2D, $13, $00, $75, $01, $E6
-mark_2FE0:	DEFB	$0A, $55, $0D, $1E, $0F, $1E, $16, $20
-mark_2FE8:	DEFB	$10, $07, $11, $08, $18, $C0, $35, $EE
-mark_2FF0:	DEFB	$36, $55, $37, $C6, $AD, $E6, $AE, $2E
-mark_2FF8:	DEFB	$F2, $C3, $F3, $1D, $F4, $2F, $ED, $00
-;
-#else
-; G007 source code, reverse engineered.
-;
-; The ZX81 labels will have been generated already.
-; No need to include ZX definitions:
-;
-
-
-;===============================
-; G007 Hi-Res graphics board for the ZX81
-; 
-; Source code partially reverse-engineered.
-; A work in progress...
-;
-; 2011-05-15 Assembles to create correct ROM image.
-;
-; Verifed by comparing the hex files,
-; the known-good reference generated by
-; 2048 defb statements containing the original bytes.
-; 
-; The source code below is not guaranteed to create the ROM image
-; exactly the way the original author had in mind,
-; as I'm not him and I don't have the original source code.
-;
-; This file was created from a disassembly generated by the
-; impressive VB81 emulator program.
-;
-; It was already know that the G007 switched out pages of
-; the ZX81 BASIC ROM and patched in replacements from
-; the G007 ROM and the ZX81's internal 1K (or 2K) RAM.
-; This is a thrifty use of RAM that expansion RAM packs
-; usually just disabled.
-;
-; Memory map:
-;
-; 0000-0FFF
-; 2000-23FF	1K RAM inside ZX81, remapped here.
-; 2400-27FF	1K RAM more RAM if ZX81 has a 2K RAM chip
-; 2800-2FFF	2K G007
-; 3000-3FFF	Empty
-; 4000-7FFF	External RAM pack
-;
-; Patching:
-;
-; 2C00-2CFF (ROM) also appears at 0C00-0CFF
-; 2000-20FF (RAM) also appears at 0000-00FF
-; 2200-22FF (RAM) also appears at 0200-02FF
-;
-; The ROM patching is active all the time.
-; The RAM patching is active only in hi-res mode.
-;
-; The patches didn't cover every modification needed,
-; so one routine is copied from ROM to RAM and
-; then individual bytes are modified there
-; by the initialisation routine which also
-; initialises some variables.
-;
-; Graphics routines:
-;
-; These have not yet been analysed.
-; Bresenham's algorithm will be there is some form.
-;
-; Triangle-filling is a sophisticated feature,
-; using 8-bit maths for a practical speed.
-;
-; Future enhancements
-;
-; Programmers may like to try writing faster routines,
-; or adding more commands now that memory is cheap.
-;
-; The bit-mask array at $2D00 looks like this:
-; 10000000
-; 01000000
-; 00100000
-; 00010000
-; 00001000
-; 00000100
-; 00000010
-; 00000001
-;
-; and suggests that pixels
-; may be plotted one at a time.
-; When I wrote a triangle-filling algorithm for the Atom,
-; I made frequent use of horizontal lines.
-; I optimised these by working out the partially-filled
-; bytes at the left and right sides, and writing
-; whole bytes (of 8 pixels) between the partial bytes.
-; This used two overlapping tables like so:
-;
-; 10000000	; BIT_MASK_R
-; 11000000
-; 11100000
-; 11110000
-; 11111000
-; 11111100
-; 11111110
-; 11111111	; BIT_MASK_L
-; 01111111
-; 00111111
-; 00011111
-; 00001111
-; 00000111
-; 00000011
-; 00000001
-;
-; This technique might be able to increase the triangle filling speed.
-;
-; A proper ellipse algorithm would also be welcome,
-; not one of those approximations using polygons!
-;
-;===============================
-; Assembly was done by a very handy online tool:
-; http://k1.dyndns.org/cgi-bin/zasm.cgi
-; which avoids the chore of installing it
-; on one's own machine.
-; The online tool is limited to one source file and
-; one include file, but that's not a big deal
-; for a tiny 2K ROM like this one.
-;
-;===============================
-; Problems
-; The G007 ROM had several instances of opcdoes
-; beginning with FD CB
-; involving the Y register.
-; VB81 disassembled them into statements
-; that looked mangled and would not re-assemble.
-; So I've just added them with defb statements.
-;
-;
-;===============================
-; Global constants:
-;===============================
-FALSE		equ	0
-NOT_G007	equ	FALSE
-
-
-
-;===============================
-; ZX81 constants:
-;===============================
-; ZX characters (not the same as ASCII)
-;-------------------------------
-ZX_EQU			equ	$14
-ZX_COMMA		equ	$1A
-ZX_THEN			equ	$DE
-ZX_TO			equ	$DF
-ZX_INV_K		equ	$B0
-ZX_NEWLINE		equ	$76
-HRG_BYTES_PER_LINE	equ	34
-ALL_BITS_SET		equ	-1
-;-------------------------------
-; tokens
-;-------------------------------
-_CLASS_00	equ	0
-_CLASS_01	equ	1
-_CLASS_02	equ	2
-_CLASS_03	equ	3
-_CLASS_04	equ	4
-_CLASS_05	equ	5
-_CLASS_06	equ	6
-;===============================
-; ZX81 I/O locations:
-;===============================	
-IO_PORT_KEYBOARD_RD	equ	$FE	; A0 low			
-ZX_NMI_GEN		equ	$FD	; A1 low		
-ZX_PRINTER_PORT		equ	$FB	; A2 low		
-;===============================
-; ZX81 RAM variables
-;===============================
-RAMBASE		equ	$4000
-ERR_NR		equ	$4000
-FLAGS		equ	$4001
-ERR_SP		equ	$4002
-RAMTOP		equ	$4004
-MODE		equ	$4006
-PPC		equ	$4007
-VERSN		equ	$4009
-E_PPC		equ	$400A
-D_FILE		equ	$400C
-DF_CC		equ	$400E
-VARS		equ	$4010
-DEST		equ	$4012
-E_LINE		equ	$4014
-CH_ADD		equ	$4016
-X_PTR		equ	$4018
-STKBOT		equ	$401A
-STKEND		equ	$401C
-BERG		equ	$401E
-MEM		equ	$401F
-UNUSED_8	equ	$4021
-G007_FLAG_Y	equ	UNUSED_8	;
-
-DF_SZ		equ	$4022
-S_TOP		equ	$4023
-LAST_K		equ	$4025
-DEBOUNCE	equ	$4027
-MARGIN		equ	$4028
-NXTLIN		equ	$4029
-NXT_LINE	equ	$4029
-OLDPPC		equ	$402B
-FLAGX		equ	$402D
-
-STRLEN		equ	$402E
-T_ADDR		equ	$4030
-SEED		equ	$4032
-FRAMES		equ	$4034
-COORDS		equ	$4036
-PR_CC		equ	$4038
-S_POSN		equ	$4039
-S_POSN_hi	equ	S_POSN+1
-CDFLAG		equ	$403B
-PRBUFF		equ	$403C
-MEMBOT		equ	$407B
-PROGRAM		equ	$407D
-UNUSED_16	equ	$407B
-UNUSED_16_hi	equ	UNUSED_16+1
-
-G007_RESTART	equ	UNUSED_16
-
-; First byte after system variables:
-USER_RAM	equ	$407D
-MAX_RAM		equ	$7FFF
-
-;===============================
-; ZX BASIC ROM addresses		
-;===============================
-; restart constants
-START		equ	$0000   ; =      0
-ERROR_1		equ	$0008   ; =      8
-PRINT_A		equ	$0010   ; =     16
-GET_CHAR	equ	$0018   ; =     24
-TEST_SP		equ	$001C   ; =     28
-NEXT_CH		equ	$0020   ; =     32
-FP_CALC		equ	$0028   ; =     40
-;-------------------------------
-L0108		equ	$0108
-SLOW_FAST	equ	$0207	;
-DISPLAY_5	equ	$02B5	;
-L029D		equ	$029D	; Inside the 'LOC_ADDR' subroutine
-SET_FAST	equ	$02E7
-LOAD		equ	$0340
-LIST		equ	$0730
-COPY		equ	$0869
-SAVE		equ	$02F6
-NEW		equ	$03C3
-LLIST		equ	$072C
-PRINT_CH	equ	$07F1	; old, replaced
-L0809		equ	$0809
-LOC_ADDR	equ	$0918
-ONE_SPACE	equ	$099B
-MAKE_ROOM	equ	$099E
-LINE_ADDR	equ	$09D8
-E_LINE_NO	equ	$0A73
-L0A95		equ	$0A95	; []*BIOS ROM*. Part way into 088A COPY_CONT
-PRINT		equ	$0ACF
-CLS		equ	$0A2A
-RECLAIM_1	equ	$0A5D
-LPRINT		equ	$0ACB
-PRINT		equ	$0ACF
-PLOT_UNPLOT	equ	$0BAF
-L0BB2		equ	$0BB2	;
-STK_TO_A	equ	$0C02
-SCROLL		equ	$0C0E
-
-;-------------------------------
-; Parameter table addresses:
-; Checked in ROM disassembly book:
-;-------------------------------
-P_LET		equ	$0C48
-P_GOTO		equ	$0C4B
-P_IF		equ	$0C4F
-P_GOSUB		equ	$0C54
-P_STOP		equ	$0C58
-P_RETURN	equ	$0C5B
-P_FOR		equ	$0C5E
-P_NEXT		equ	$0C66
-P_PRINT		equ	$0C6A
-P_INPUT		equ	$0C6D
-P_DIM		equ	$0C71
-P_REM		equ	$0C74
-P_NEW		equ	$0C77
-P_RUN		equ	$0C7A
-P_LIST		equ	$0C7D
-P_POKE		equ	$0C80
-P_RAND		equ	$0C86
-P_LOAD		equ	$0C89
-P_SAVE		equ	$0C8C
-P_CONT		equ	$0C8F
-P_CLEAR		equ	$0C92
-P_CLS		equ	$0C95
-
-P_PLOT		equ	$0C98	; redefined in G007 patch
-P_UNPLOT	equ	$0C9E	; redefined in G007 patch
-P_SCROLL	equ	$0CA4
-
-P_PAUSE		equ	$0CA7
-;P_SLOW		equ	$0CAB
-;P_FAST		equ	$0CAE
-;P_COPY		equ	$0CB1
-;P_LPRINT	equ	$0CB4
-;P_LLIST	equ	$0CB7
-;-------------------------------
-
-STOP		equ	$0CDC	; defined in this file
-
-REM		equ	$0D6A
-INPUT_RE	equ	$0D6F
-
-REPORT_C	equ	$0D9A	; according to the book
-REPORT_C_007	equ	$0D26	; seems the right one
-SYNTAX_Z	equ	$0DA6
-IF		equ	$0DAB
-FOR		equ	$0DB9
-
-NEXT		equ	$0E2E
-RAND		equ	$0E6C
-CONT		equ	$0E7C
-GOTO		equ	$0E81
-POKE		equ	$0E92
-L0EA8		equ	$0EA8	; Inside the 'FIND_INT.' subroutine
-REPORT_B	equ	$0EAD
-				; check this!!!
-RUN		equ	$0EAF
-CLEAR_007	equ	$0EB2	; goes to JP CLEAR
-GOSUB		equ	$0EB5
-RETURN		equ	$0ED8
-INPUT		equ	$0EE9
-
-FAST		equ	$0F23
-SLOW		equ	$0F2B
-PAUSE		equ	$0F32
-
-DIM		equ	$1409
-CLEAR		equ	$149A
-SET_MEM		equ	$14BC
-
-
-;===============================
-; G007 Memory patch addresses
-;===============================
-; These patches only appear in hi-res mode
-;
-RAM_PATCH_0000	equ	$0000
-RAM_PATCH_0200	equ	$0200
-ROM_PATCH_0C00	equ	$0C00
-;
-; Their aliases are always present:
-;
-RAM_PATCH_2000	equ	$2000
-RAM_PATCH_2200	equ	$2200
-;===============================
-; G007 Plot number notes (a work in prgress)		
-;===============================
-;	N-1
-;
-;	76543 210	
-;	..... .00	Line in white.
-;	..... .01	Line black.
-;	..... .10	Line inverting.
-;	..... .11	Line inverting, omit last pixel.
-;
-;	..... 0..	Absolute co-ordinates
-;	..... 1..	Relative co-ordinates
-;
-;	....0 ...	Line
-;	....1 ...	Single pixel
-;
-;	.0100 ...	Coarse dotted line
-;	.0101 ...	Add 40: triangle, plain
-;	.1001....	Add 72: triangle, textured (not available in invert mode)
-;	.1000 ...	Add 64:   fine dotted line
-;	.1100 ...	Add 96:  chain dotted line
-;
-;	Note that PLOT 12 and PLOT 16 miss out the pixel, so simply move the PLOT position.
-;
-
-
-
-
-
-;===============================
-; G007 Byte constants			
-;===============================
-
-
-
-
-
-G007_INT_REG_VALUE_FOR_HI_RES_GRAPHICS		equ	$1F
-G007_INT_REG_VALUE_FOR_LO_RES_GRAPHICS		equ	$1E
-
-;	Dec. 	Hex. 	Bytes 	System Variables: G007			
-			
-;	8448	2100	Reserved for user defined characters
-;	8703	21FF	
-;			
-;	8704	2200	Another page, possibly 
-;	8959	22FF	
-			
-;===============================
-; G007 Byte constants			
-;===============================
-MEM_PATCH_SIZE	equ	$0100
-;===============================
-; G007 RAM variables
-;===============================
-
-V2265		equ	$2265
-V2264		equ	$2264
-
-;	Dec. 	Hex. 	Bytes 	System Variables: G007			
-;	8960	2300	2	Offset of hi-res display file, less 9, from the D-FILE variable			
-;	8962	2302	2	Not used			
-;	8964	2304	2	Start address of last line of lo-res display file			
-
-G007_DISPLAY_OFFSET_FROM_DFILE_LESS_9	equ	$2300	; conflict!
-
-G007_UNUSED_2302			equ	$2302
-G007_DISPLAY_ADDRESS_LO_RES_LAST_LINE	equ	$2304
-G007_DISPLAY_ADDRESS_LESS_9	equ	$2306	;	8966	2306	2	Start address of hi-res display file, less 9 (used for video)			
-G007_DISPLAY_ADDRESS		equ	$2308	;	8968	2308	2	Start address of hi-res display file			
-G007_TRIANGLE_TEXTURE		equ	$230A	;	8970	230A 	2	Bytes defining triangle texture			
-G007_CHAR_TABLE_ADDR_0_63	equ	$230C	;	8972	230C 	2	Character table address for CHR$0-63			
-G007_CHAR_TABLE_ADDR_128_159	equ	$230E	;	8974	230E 	2	Character table address for CHR$128-159			
-G007_PLOT_ROUTINES_VECTOR	equ	$2310	;	8976	2310	2	Vector for additional plot routines			
-G007_FLAG_0			equ	$2312	;	8978	2312	3 * 	Various flags			
-G007_FLAG_1			equ	$2313
-G007_FLAG_2			equ	$2314
-G007_USR_DEF_CHR_TAB_LESS_256	equ	$2315	;	8981	2315	2	Address of user-defined character table, less 256			
-G007_READ_POINT_BYTE		equ	$2317	;	8983	2317	1	Read-point byte. Non-zero if pixel is set.			
-G007_DISPLAY_HEIGHT		equ	$2318	;	8984	2318	1 * 	Display height, normally 192			
-G007_FLAG_3			equ	$2319	;	8985	2319	1	Flags			
-
-;G007_TEMP_WORD_0		equ	$231C	;
-G007_TEMP_BYTE_0		equ	$231A	;	9886	231A 	7	Temporary variables for PLOT routine.			
-G007_TEMP_BYTE_1		equ	$231B
-
-G007_TEMP_WORD_1		equ	$231C	;
-;G007_TEMP_BYTE_2		equ	$231C
-;G007_TEMP_BYTE_3		equ	$231D
-
-G007_TEMP_WORD_2		equ	$231E	;
-G007_TEMP_BYTE_4		equ	$231E
-G007_TEMP_BYTE_5		equ	$231F
-
-G007_TEMP_BYTE_6		equ	$2320
-G007_OUT_OF_RANGE_FLAGS		equ	$2321	;	8993	2321	1	Plot out of range flags. Bit 7 = latest statement			
-G007_UNUSED			equ	$2322	;	8994	2322	1	Not used		
-G007_PLOT_X			equ	$2323	;	8995	2323	2	X co-ordinate for PLOT. Signed 16-bit			
-G007_PLOT_Y			equ	$2325	;	8997	2325	2	Y co-ordinate for PLOT. Signed 16-bit			
-G007_PLOT_X_PREVIOUS_N1		equ	$2327	;	8999	2327	8	X and Y co-ordinates for previous two statements			
-G007_PLOT_Y_PREVIOUS_N1		equ	$2329
-G007_PLOT_X_PREVIOUS_N2		equ	$232B
-G007_PLOT_Y_PREVIOUS_N2		equ	$232D
-G007_FLAG_4			equ	$232F	;	9007	232F 	1	Flags			
-G007_ORIGIN_Y			equ	$2330	;	9008	2330	2	Y co-ordinate of graphics origin			
-G007_ORIGIN_X			equ	$2332	;	9010	2332	2	X co-ordinate of graphics origin			
-G007_LINE_TYPE			equ	$2334	;	9012	2334	4	Bytes defining four line types			
-G007_TEMP_BYTE_7		equ	$2338	;	9016	2338	2	Temporary variable for PLOT			
-G007_TEMP_BYTE_8		equ	$2339	;
-G007_V23A0			equ	$23A0
-;===============================
-; G007 RAM routines
-;===============================
-; Yes, there is such a thing!
-L23B8				equ	$23B8
-;===============================
-; G007 ROM routines
-;===============================
-L2BF7		equ	$2BF7	; invalid opcode address
-SLOW_FAST_007	equ	$2D08	; new!
-;===============================
-; Needed by zasm:
-#target	rom		; declare target file format
-#code	$2800,$0800	; declare code segment start and size	
-;
-;===============================
-; G007 ROM assembly code
-;===============================
-; Start of ROM contents;
-; 10240/12287 : 2800/2FFF	
-;===============================
-G007_GET_PIXEL_ADDRESS_AND_MASK:	;	
-	LD	HL,(G007_PLOT_X)	; X co-ordinate for PLOT. Signed 16-bit. Fetch 16 bits	
-L2803:	
-	LD	A,(G007_PLOT_Y)	; Y co-ordinate for PLOT. Signed 16-bit. Fetch 8 bits	
-	LD	H,A	; and store in H	
-L2807:	
-	EX	DE,HL	; then swap it into D	
-	LD	A,(G007_DISPLAY_HEIGHT)	
-	DEC	A;	
-	SUB	D	;	
-	LD	D,A	
-	LD	A,7	; A must be 0 to 7	
-	AND	A,E	; E is the LS byte of the X co-ordinate	
-	LD	L,A	; L = A	= selects bit-mask	
-	LD	H,$2D	; bit-mask array is at $2D00	
-	LD	A,(HL)	; get byte with bit set at appropriate position	
-	
-	LD	HL,(G007_DISPLAY_ADDRESS)	; Start address of hi-res display file	
-;-------------------------------	
-; Add two bytes for every line 	
-;	
-	LD	C,D	; BC = Y coordinate	
-	LD	B,0	
-	ADD	HL,BC	; HL += BC*2	
-	ADD	HL,BC	
-;-------------------------------
-; DE /= 8 gets byte offset from left of screen	
-;	
-	SRL	D	; shift DE right	
-	RR	E	
-	SRL	D	; shift DE right	
-	RR	E	
-	SRL	D	; shift DE right	
-	RR	E	
-	
-	ADD	HL,DE	; HL = G007_DISPLAY_ADDRESS + byte offset of XY-co-ordinates	
-	LD	B,A	; A and B hold the bitmask	
-	RET	; return	
-;===============================	
-L282C:	
-	LD	A,(G007_OUT_OF_RANGE_FLAGS)	; Plot out of range flags. Bit 7 = latest statement	
-	
-	LD	HL,(G007_PLOT_X_PREVIOUS_N1)	
-	LD	DE,(G007_PLOT_X)		; X co-ordinate for PLOT. Signed 16-bit	
-	
-	EXX	
-	
-	LD	HL,(G007_PLOT_Y)	
-	LD	DE,(G007_PLOT_Y_PREVIOUS_N1)	
-
-						; test two most recent out-of-range flag bits:
-	BIT	6,A	
-	JR	Z,L285E	
-	BIT	7,A	
-	RET	NZ	
-	
-	LD	A,(G007_FLAG_Y);	
-	PUSH	AF	
-	LD	B,8
-;-------------------------------	
-loop_284B:	
-	RRCA
-
-;284C   FD;CB;21;16      LD C,SLA (IY+CH_ADD-RAMBASE)     output from VB81 disassembler
-
-#if 1
-	RL	(IY+G007_FLAG_Y-RAMBASE)	; makes FD CB 21 16	- correct!
-#else						; force bytes
-	defb	$FD
-	defb	$CB
-	defb	$21
-	defb	$16
-#endif
-	DJNZ	loop_284B	
-;-------------------------------
-	EX	DE,HL	
-	EXX	
-	EX	DE,HL	
-	EXX	
-	CALL	L285E	
-	POP	AF	
-	LD	(G007_FLAG_Y),A;	
-	RET	
-;===============================
-L285E:	
-	LD	BC,-HRG_BYTES_PER_LINE		; NB negative number = $FFDE
-	LD	A,(G007_DISPLAY_HEIGHT)	
-	DEC	A	
-	SUB	E	
-	SBC	HL,DE	
-	JP	P,L2876
-;-------------------------------
-	LD	BC,HRG_BYTES_PER_LINE
-	LD	A,E	
-	
-	PUSH	DE	
-	ADD	HL,DE	
-	EX	DE,HL	
-	OR	A,A	
-	SBC	HL,DE	
-	POP	DE	
-;-------------------------------
-L2876:	
-	PUSH	HL	
-	LD	H,E	
-	LD	E,A	
-	EXX	
-
-	LD	BC,L28FB	
-	LD	A,L	
-	EXX	
-	LD	L,A	
-	EXX	
-	OR	A,A	
-	SBC	HL,DE	
-	JP	P,L2890	; [10384]	
-;-------------------------------
-	LD	BC,L2904	
-	CPL	
-	ADD	HL,DE	
-	EX	DE,HL	
-	OR	A,A	
-	SBC	HL,DE	
-L2890:	
-	LD	(G007_TEMP_BYTE_0),BC	; Temporary variables for PLOT routine. 	
-	POP	DE	
-	OR	A,A	
-	SBC	HL,DE	
-	ADD	HL,DE	
-	JR	NC,L28A4	
-;-------------------------------
-	EX	DE,HL	
-
-	LD	BC,L28F6	
-	EXX	
-	LD	D,E	
-	LD	E,A	
-	LD	A,D	
-	EXX	
-L28A4:
-	LD	(G007_TEMP_WORD_1),BC	
-	EXX	
-	LD	D,A	
-;-------------------------------
-	PUSH	DE	
-	EXX	
-	POP	BC	
-;-------------------------------
-	LD	A,(G007_OUT_OF_RANGE_FLAGS)	; Plot out of range flags. Bit 7 = latest statement	
-	CP	$40	
-	JR	NC,L28B6	
-;-------------------------------	
-	LD	B,L	; BC = LE	
-	LD	C,E	
-;-------------------------------
-L28B6:	
-	INC	B	
-	INC	C	
-;-------------------------------
-L28B8:	
-	SRL	H	
-	JR	C,L28BE	
-	
-	JR	Z,L28C6	
-;-------------------------------
-L28BE:	
-	RR	L	
-	SRL	D	
-	RR	E	
-	JR	L28B8	
-;-------------------------------
-L28C6:	
-	LD	D,L	
-	SRL	L	
-	EXX	
-	PUSH	BC	
-	CALL	L2807	
-	POP	DE	
-	LD	A,(G007_TEMP_BYTE_5)	
-	LD	C,A	
-;-------------------------------
-L28D3:
-;	Bytes from disassembler:
-;28D3   FD;CB;21;06      LD C,SLA (IY+6)      
-#if 1
-	RLC (IY+G007_FLAG_Y-RAMBASE)   ; makes FD CB 21 06
-#else
-;	force bytes
-	defb	$FD
-	defb	$CB
-	defb	$21
-	defb	$06
-#endif
-	
-	JR	C,L28E1	
-;-------------------------------
-	LD	A,(G007_TEMP_BYTE_4)	
-	XOR	A,(HL)	
-	OR	A,C	
-	AND	A,B	
-	XOR	A,(HL)	
-	LD	(HL),A	
-;-------------------------------
-L28E1:
-	EXX	
-
-	LD	A,L	
-	DEC	B	
-	RET	Z	
-;-------------------------------
-	SUB	E	
-	JR	NC,L28F2	
-;-------------------------------
-	DEC	C	
-	RET	Z	
-;-------------------------------
-	ADD	A,D	
-	EXX	
-	ADD	HL,DE	
-	EXX	
-	LD	HL,(G007_TEMP_BYTE_0)	; Temporary variables for PLOT routine.	
-	JP	(HL)
-;-------------------------------
-L28F2:	
-	LD	HL,(G007_TEMP_WORD_1)	
-	JP	(HL)
-;-------------------------------
-L28F6:
-	LD	L,A	
-	EXX	
-	ADD	HL,DE	
-	JR	L28D3
-;-------------------------------
-L28FB:	
-	LD	L,A	
-	EXX	
-	RLC	B	
-	JR	NC,L28D3	
-;-------------------------------
-	DEC	HL	
-	JR	L28D3
-;-------------------------------
-L2904:
-	LD	L,A	
-	EXX
-		
-	RRC	B	
-	JR	NC,L28D3	
-;-------------------------------
-	INC	HL	
-	JR	L28D3	
-;-------------------------------
-G007_INTEGER_FROM_STACK_TO_BC:	
-	LD	HL,(L0EA8)	; Inside the 'FIND_INT.' subroutine	
-				; 0EA7 FIND_INT	CALL	158A,FP_TO_BC	
-				; so 0EA8 should contain $158A, pointing to the FP_TO_BC routine	
-	JP	(HL)		; exit	
-;===============================	
-G007_INTEGER_FROM_STACK_TO_HL:	
-	CALL	G007_INTEGER_FROM_STACK_TO_BC	; get an integer	
-	JR	C,L2924	
-;-------------------------------
-	LD	HL,0	
-	JR	Z,L2921	
-;-------------------------------
-	SBC	HL,BC		; HL = 0 - BC	
-	RET	M	
-	RET	Z	
-;-------------------------------
-	JR	L2924
-;-------------------------------
-L2921:
-	ADC	HL,BC
-	RET	P
-;-------------------------------
-L2924:	
-	POP	HL	
-	RET	
-;===============================
-;	
-G007_PLOT_UNPLOT_N_X_Y:				; takes parameters from the stack
-;
-	CALL	G007_INTEGER_FROM_STACK_TO_HL	; get Y
-	LD	(G007_PLOT_Y),HL	
-	CALL	G007_INTEGER_FROM_STACK_TO_HL	; get X
-	PUSH	HL	
-	CALL	STK_TO_A			; get N
-						;
-	POP	BC				; BC = X
-	LD	DE,(G007_PLOT_Y)		; DE = Y
-	JR	Z,G007_PLOT			; 
-	DEC	A				; if (N-1) is zero
-	RET	NZ	
-;-------------------------------
-	LD	HL,L0C9C			; then T_ADDR = HL = L0C9C
-	LD	(T_ADDR),HL			; 
-;-------------------------------
-L2942:	
-	LD	B,E	
-	JP	L0BB2				; []*BIOS ROM*	
-;===============================	
-; The Plot Routine:	
-; A  == the plot number N	
-; BC == screen X	
-; DE == screen Y	
-;-------------------------------
-G007_PLOT:	
-	OR	A,A	
-	JR	Z,L2942	
-;-------------------------------
-	DEC	A				; when PLOT N value is decremented, bits make more sense	
-;-------------------------------
-	PUSH	DE				; push screen Y	
-	PUSH	BC				; push screen X	
-	PUSH	AF				; push plot number-1	
-	
-	CALL	G007_CHECK_AND_SET_UP_DISPLAY_FILE	
-	
-	POP	AF	
-	POP	DE	
-	POP	BC				; NB BC and DE are swapped
-;-------------------------------
-	CP	$81				; Was A=129 (PLOT 130 sets graphics origin)	
-	JR	NZ,G007_PLOT_XY_TO_HISTORY	
-
-;-------------------------------
-G007_ORIGIN_SET:	
-	;	
-	LD	(G007_ORIGIN_Y),DE		; Y co-ordinate of graphics origin	
-	LD	(G007_ORIGIN_X),BC		; X co-ordinate of graphics origin	
-	LD	BC,$0000			; BC = 0	
-	LD	D,B				; DE = BC = 0	
-	LD	E,B	
-	LD	A,$0B	
-
-;-------------------------------
-G007_PLOT_XY_TO_HISTORY:	
-	;	
-	BIT	2,A;			; the (PLOT_N -1)
-	JR	Z,G007_PLOT_ABSOLUTE	
-
-;-------------------------------	
-G007_PLOT_RELATIVE:			;	
-	LD	HL,(G007_PLOT_Y_PREVIOUS_N1)	
-	PUSH	HL	
-	LD	HL,(G007_PLOT_X_PREVIOUS_N1)	
-	JR	G007_PLOT_ABSOLUTE_OR_RELATIVE	
-;===============================
-G007_PLOT_ABSOLUTE:	
-	LD	HL,(G007_ORIGIN_X)	; X co-ordinate of graphics origin	
-	PUSH	HL	
-	LD	HL,(G007_ORIGIN_Y)	; Y co-ordinate of graphics origin	
-;-------------------------------	;
-					; 
-G007_PLOT_ABSOLUTE_OR_RELATIVE:		;	
-	OR	A,A			; update flags
-	ADC	HL,DE			; HL = G007_PLOT_Y + G007_ORIGIN_Y	
-	POP	DE			; DE = G007_PLOT_X co-ordinate of graphics origin
-	RET	PE			
-;-------------------------------
-	LD	(G007_PLOT_X),HL	; record plot X 	
-	EX	DE,HL	
-	OR	A,A			; restore Flags 
-	ADC	HL,BC			; HL = G007_PLOT_X + G007_ORIGIN_X	
-	RET	PE
-;-------------------------------
-	LD	(G007_PLOT_Y),HL	; record plot Y 	
-	LD	E,A	
-	LD	A,%11000000		; $C0
-	AND	A,H			; 	
-	RET	PO;	
-;-------------------------------
-	LD	A,%11000000		; $C0
-	AND	A,D	
-	RET	PO	
-;-------------------------------	; push alternate HL,DE,BC
-	EXX	
-	PUSH	HL	
-	PUSH	DE	
-	PUSH	BC	
-	CALL	G007_RANGE_CHECK
-;-------------------------------	; pop alternate BC,DE,HL
-L299A:	
-	POP	BC	
-	POP	DE	
-	POP	HL	
-	EXX	
-	RET	
-;===============================
-G007_RANGE_CHECK:	
-	EXX	
-	LD	A,H	; A = H OR D	
-	OR	A,D	
-	SCF	
-	JR	NZ,G007_RANGE_CHECK_UPDATE	; if not zero, out of range already so ignore display height	
-;-------------------------------
-	LD	A,(G007_DISPLAY_HEIGHT)		; check Y coordinate 
-	DEC	A				; if (G007_DISPLAY_HEIGHT - Y ) is less than zero,
-	CP	L				; set the Carry flag
-;-------------------------------
-G007_RANGE_CHECK_UPDATE:			; latest flag in Carry is shifted into history flags
-	LD	A,(G007_OUT_OF_RANGE_FLAGS)	; 	
-	RRA					; shift bits right. Bit 7 = latest statement	
-	LD	(G007_OUT_OF_RANGE_FLAGS),A	; 	
-	LD	A,E				; E bit 7
-	BIT	7,A	
-	JR	Z,L29BA	
-;-------------------------------		; gets here if PLOT_N is over 130
-	LD	HL,(G007_PLOT_ROUTINES_VECTOR)	; Vector for additional plot routines	
-	JP	(HL)				; This looks very promising,
-						; makes it easy to bolt-on extra graphics routines
-;===============================
-L29BA:	
-	PUSH	AF	
-	AND	3	
-	RRA	
-	DEC	A	
-	CPL	
-	LD	H,A	
-	SBC	A,A	
-	LD	L,A	
-	LD	(G007_TEMP_WORD_2),HL	
-	PUSH	HL	
-	BIT	3,E	
-	JR	NZ,L29F3	
-;-------------------------------
-	LD	A,(G007_TEMP_BYTE_6)	
-	XOR	A,E	
-	AND	%11111011			; $FB. Bit 2 ignored
-	JR	Z,L29E2	
-;-------------------------------
-	LD	HL,G007_LINE_TYPE	
-	LD	A,E	
-;-------------------------------		; A *= 8
-	RLCA		
-	RLCA	
-	RLCA	
-;-------------------------------
-	AND	$03	
-	ADD	A,L	
-	LD	L,A	
-	LD	A,(HL)	
-	LD	(G007_FLAG_Y),A;
-;-------------------------------
-L29E2:	
-	CALL	L282C;	
-	POP	HL	
-
-;-------------------------------
-;	Bytes from disassembler:	29E6   FD;CB;21;0E      LD C,SLA (IY+14)
-
-	RRC (IY+G007_FLAG_Y-RAMBASE)		; makes FD CB 21 0E	
-	JR	C,L2A12	
-;===============================	
-	LD	A,H				; A = H and L
-	AND	A,L	
-	JR	Z,L2A12	
-;-------------------------------
-	INC	L	
-	LD	E,L	
-	PUSH	HL	
-;-------------------------------
-L29F3:	
-	LD	A,(G007_OUT_OF_RANGE_FLAGS)	; Bit 7 = latest statement	
-	BIT	5,E				
-	JR	NZ,G007_TRIANGLE_PLAIN	
-;-------------------------------
-	BIT	6,E	
-	JR	NZ,G007_TRIANGLE_TEXTURED	
-;-------------------------------
-	POP	HL	
-	BIT	7,A	
-	JR	NZ,L2A12	
-;-------------------------------
-	PUSH	HL	
-	CALL	G007_GET_PIXEL_ADDRESS_AND_MASK	
-	AND	A,(HL)	
-	LD	(G007_READ_POINT_BYTE),A	; "Read-point" byte. Non-zero if pixel is set.	
-	POP	DE	
-	LD	A,(HL)	
-	OR	A,D	
-	XOR	A,E	
-	AND	A,B	
-	XOR	A,(HL)	
-	LD	(HL),A
-;-------------------------------
-L2A12:	
-	POP	AF	
-	LD	(G007_TEMP_BYTE_6),A	
-	LD	HL,G007_PLOT_Y_PREVIOUS_N1+1	
-	LD	DE,G007_PLOT_Y_PREVIOUS_N2+1	
-	LD	BC,8	
-	BIT	4,A	
-	JR	Z,L2A34	
-;-------------------------------
-	LD	A,(G007_OUT_OF_RANGE_FLAGS)	; Plot out of range flags. Bit 7 = latest statement	
-	AND	$C0	; only want most recent two bits	
-	RLA	
-	JR	NC,L2A2D	
-	SET	6,A	; carry flag into bit 6 of A	
-;-------------------------------
-L2A2D:	
-	LD	(G007_OUT_OF_RANGE_FLAGS),A	
-	LD	L,$26	
-	LD	C,4	
-;-------------------------------
-L2A34:	
-	LDDR					; (DE--)=(HL--); BC-- UNTIL BC IS ZERO	
-	RET	
-;===============================
-G007_TRIANGLE_PLAIN:	
-	LD	HL,ALL_BITS_SET	
-	JR	G007_TRIANGLE_TEXTURED_BY_HL	
-;===============================
-G007_TRIANGLE_TEXTURED:	
-	LD	HL,(G007_TRIANGLE_TEXTURE)	; Bytes defining triangle texture
-;-------------------------------
-G007_TRIANGLE_TEXTURED_BY_HL:	
-	EXX	
-	AND	$E0	; = 224	
-	JP	NZ,REPORT_B;	
-;-------------------------------
-L2A45:	
-	LD	HL,G007_OUT_OF_RANGE_FLAGS	
-	LD	(IY+G007_FLAG_Y-RAMBASE),$55	
-	LD	B,3	
-;-------------------------------
-loop_2A4E:	
-	INC	HL		; HL+=2	
-	INC	HL	
-	LD	E,(HL)	
-	INC	HL		; HL+=2	
-	INC	HL	
-	LD	D,(HL)	
-	PUSH	DE	
-	DJNZ	loop_2A4E	; BC--	
-;-------------------------------
-	POP	BC		; restore register pairs	
-	POP	DE	
-	POP	HL	
-;-------------------------------
-	OR	A,A		
-	JR	Z,L2A5F	
-;-------------------------------
-	LD	B,H		; BC=HL	
-	LD	C,L	
-;-------------------------------
-L2A5F:	
-	LD	A,B	
-	CP	H	
-	JR	NC,L2A66	
-;-------------------------------
-	PUSH	BC	
-	EX	(SP),HL	
-	POP	BC	
-;-------------------------------
-L2A66:	
-	LD	A,H	
-	CP	D	
-	JR	NC,L2A6B	
-;-------------------------------
-	EX	DE,HL	
-;-------------------------------
-L2A6B:	
-	LD	A,D	
-	EXX	
-	AND	7	
-	INC	A	
-	LD	B,A	
-	LD	A,H	
-;-------------------------------
-loop_2A72:	
-	RLC	L	; L *= 2	
-;-------------------------------
-	RLCA		; A *= 8	
-	RLCA	
-	RLCA	
-;-------------------------------
-	DJNZ	loop_2A72	; loop while BC-- is not zero	
-;-------------------------------
-	LD	H,A	
-	LD	(G007_TEMP_BYTE_7),HL	; Temporary variable for PLOT	
-	EXX	
-;-------------------------------
-	LD	A,H	
-	CP	B	
-	LD	A,7	
-	JR	NC,L2A87
-;-------------------------------
-loop_2A84:	
-	PUSH	BC	
-	EX	(SP),HL	
-	POP	BC	
-;-------------------------------
-L2A87:	
-	EX	DE,HL	
-	PUSH	AF	
-	LD	A,C	
-	EXX	
-	LD	H,A	
-	LD	L,A	
-	LD	C,A	
-	LD	(G007_TEMP_BYTE_0),HL	; Temporary variables for PLOT routine. 	
-	LD	B,$FE	
-	EXX	
-	SUB	E	
-	EXX	
-;-------------------------------
-	JR	NC,skip_2A9C	
-	LD	B,$00	
-	NEG	
-skip_2A9C:	
-;-------------------------------
-	LD	D,A	
-	EXX	
-	LD	A,D	
-	SUB	B	
-	EXX	
-	LD	H,A	
-;-------------------------------
-	CP	D	
-	JR	NC,skip_2AA7	
-	EX	DE,HL	
-	INC	B	
-skip_2AA7:	
-;-------------------------------
-	LD	L,H	
-	INC	L	
-	LD	E,H	
-	SRL	E	
-
-	POP	AF	
-	RRCA	
-	JR	NC,L2AB9	
-;-------------------------------
-	PUSH	HL	
-;-------------------------------
-	PUSH	DE	
-	PUSH	BC	
-;-------------------------------
-	RRCA	
-	EXX	
-;-------------------------------
-	JR	C,loop_2A84	
-	JR	L2A87	
-;===============================
-L2AB9:	
-	EXX	
-	LD	H,B	
-	LD	L,1
-;-------------------------------
-loop_2ABD:
-	POP	BC	
-	POP	DE	
-;-------------------------------
-	EX	(SP),HL	
-;-------------------------------
-L2AC0:	
-	DEC	L	
-	JR	NZ,L2AD9	
-;-------------------------------
-	LD	HL,(G007_TEMP_BYTE_0)	; Temporary variables for PLOT routine.	
-	LD	A,C	
-;-------------------------------
-	CP	H	
-	JR	C,skip_2ACB	
-	LD	H,A	
-skip_2ACB:	
-;-------------------------------
-	CP	L
-	JR	NC,skip_2ACF	
-	LD	L,A	
-skip_2ACF:	
-;-------------------------------
-	LD	(G007_TEMP_BYTE_0),HL	; Temporary variables for PLOT routine. 	
-	POP	HL	
-	DEC	L	
-;-------------------------------
-L2AD4:	
-	
-	JR	Z,loop_2ABD	
-	
-	PUSH	HL	
-	JR	L2AEE	
-;-------------------------------
-L2AD9:	
-	LD	A,E	
-	SUB	D	
-	JR	C,L2AE7	
-;-------------------------------
-	LD	E,A	
-	BIT	0,B	
-	JR	Z,L2AEE	
-;-------------------------------
-	LD	A,C	
-	ADD	A,B	
-	LD	C,A	
-	JR	L2AC0	
-;-------------------------------
-L2AE7:	
-	ADD	A,H	
-	LD	E,A	
-	LD	A,1	
-	OR	A,B	
-	ADD	A,C	
-	LD	C,A	
-;-------------------------------
-L2AEE:	
-	LD	A,C	
-	EXX
-;-------------------------------
-	RRC	(IY+G007_FLAG_Y-RAMBASE)   ; makes FD CB 21 0E
-
-	JR	C,L2AC0				; if 
-;-------------------------------
-	EX	(SP),HL	
-;-------------------------------
-	PUSH	DE	
-	PUSH	BC	
-	PUSH	HL	
-;-------------------------------
-	LD	DE,(G007_TEMP_BYTE_0)	
-	LD	B,A	
-;-------------------------------
-	CP	C	
-	JR	NC,skip_2B04	
-	LD	B,C	
-	LD	C,A	
-skip_2B04:	
-;-------------------------------
-	LD	(G007_TEMP_BYTE_0),BC	
-	LD	A,C	
-;-------------------------------
-	CP	E	
-	INC	A	
-	JR	C,skip_2B0E	
-	LD	A,E	
-skip_2B0E:	
-;-------------------------------
-	LD	L,A	
-	LD	A,D	
-;-------------------------------
-	CP	B	
-	JR	NC,skip_2B15	
-	LD	A,B	
-	DEC	A
-skip_2B15:	
-;-------------------------------
-	SUB	L	
-	INC	A	
-	PUSH	AF	
-	CALL	L2807	
-	
-	POP	AF	
-	LD	C,A	
-	EX	DE,HL	
-	LD	HL,G007_TEMP_BYTE_8	
-	LD	A,(HL)	
-;-------------------------------	
-	RLCA	
-	RLCA	
-	RLCA	
-;-------------------------------
-	LD	(HL),A	
-	DEC	HL	
-	RLC	(HL)	
-	OR	A,(HL)	
-	LD	HL,(G007_TEMP_WORD_2)	
-	XOR	A,L	
-	CPL	
-	LD	L,A	
-	EX	DE,HL	
-;-------------------------------
-loop_2B31:
-	LD	A,E	
-	XOR	A,(HL)	
-	OR	A,D	
-	AND	A,B	
-	XOR	A,(HL)	
-	LD	(HL),A 	
-;-------------------------------
-loop_2B37:	
-	DEC	C	
-	JR	NZ,L2B4E	
-;-------------------------------
-	POP	HL	
-	INC	H	
-	BIT	7,L	
-	JR	Z,L2AD4	
-;-------------------------------	; discard 3 words from stack
-	POP	HL	
-	POP	HL	
-	POP	HL	
-;-------------------------------
-	POP	HL	
-	LD	A,H	
-	AND	A,L	
-	JP	Z,L2A12	
-;-------------------------------
-	INC	L	
-	PUSH	HL	
-	JP	L2A45	
-;-------------------------------
-L2B4E:	
-	RR	B	
-	JR	NC,loop_2B31	
-;-------------------------------
-	INC	HL	
-	LD	B,C	
-	LD	A,C	
-	AND	$07	
-	LD	C,A	
-;-------------------------------
-	SRL	B	; B *= 8	
-	SRL	B	
-	SRL	B	
-;-------------------------------
-	JR	Z,L2B68	
-;-------------------------------
-loop_2B60:
-	LD	A,E	
-	XOR	A,(HL)	
-	OR	A,D	
-	XOR	A,(HL)	
-	LD	(HL),A	
-	INC	HL	
-	DJNZ	loop_2B60	
-;-------------------------------
-L2B68:	
-	SCF	
-	INC	C	
-	JR	loop_2B37	
-;-------------------------------
-L2B6C:
-	LD	HL,(G007_FLAG_1)	
-	DEC	L	
-	OR	A,L	
-	JP	NZ,L0809	; iii) Testing S-POSN: 0808 ENTER-CH	LD	D,A	
-				; G007 skips that first instruction though.
-;-------------------------------
-
-	DEC	H				; if --H, 
-	JP	NZ,L23B8			; then jump to modified copy of a ZX81 routine, in RAM.
-;-------------------------------		; 
-	LD	A,(G007_OUT_OF_RANGE_FLAGS)	; Plot out of range flags. Bit 7 = latest statement	
-	RLA	
-	RET	C	
-;-------------------------------
-	NOP	
-	NOP	
-	LD	HL,(G007_PLOT_X_PREVIOUS_N1+1)	
-	LD	A, (G007_PLOT_X_PREVIOUS_N1)	
-	BIT	6,D	
-;-------------------------------
-mark_2B87:
-	JR	NZ,L2B8E	; 20;05
-	
-	LD	L,A	
-	ADD	A,8
-	JR	NC,L2B9B	
-;-------------------------------
-L2B8E:	
-	LD	A,H	
-;-------------------------------
-	SUB	8	
-	JR	NC,skip_2B97	
-	LD	A,(G007_DISPLAY_HEIGHT)	
-	DEC	A	
-skip_2B97:
-;-------------------------------
-	LD	(G007_PLOT_Y_PREVIOUS_N1),A;	
-	XOR	A,A	; A = 0
-;-------------------------------
-L2B9B:
-	LD	(G007_PLOT_X_PREVIOUS_N1),A	
-	BIT	6,D	
-	RET	NZ	
-;-------------------------------
-	CALL	L2EEF	
-	
-	LD	A,L	
-;-------------------------------
-	CP	$F9	
-	JR	C,skip_2BAB	
-	LD	E,2	
-skip_2BAB:	
-;-------------------------------
-	CPL	
-	AND	7	
-	INC	A	
-	LD	D,A	
-	LD	A,H	
-	INC	A	
-	EXX
-
-	LD	D,A	
-	EXX	
-	PUSH	DE	
-	CALL	L2807	
-	EXX	
-;-------------------------------
-L2BBA:
-	LD	A,C	
-	XOR	A,(HL)	
-	EXX	
-	EX	DE,HL	
-LXXX:
-	POP	BC	
-	PUSH	BC	
-	LD	L,A	
-	LD	H,$00
-;-------------------------------
-loop_2BC3:
-	ADD	HL,HL	
-	DJNZ	loop_2BC3	
-;-------------------------------
-	EX	DE,HL	
-	LD	B,2
-;-------------------------------
-L2BC9:	
-	LD	A,(G007_RESTART);	
-	XOR	A,(HL)	
-	OR	A,(IY+G007_RESTART+1-RAMBASE)	
-	AND	A,D	
-	XOR	A,(HL)	
-;-------------------------------
-	DEC	C	
-	JR	Z,skip_2BD6	
-	LD	(HL),A
-skip_2BD6:	
-;-------------------------------
-	LD	D,E	
-	INC	HL	
-	DJNZ	L2BC9	
-;-------------------------------
-	LD	C,$20	
-	ADD	HL,BC	
-	EXX	
-	INC	HL	
-;-------------------------------
-	DEC	D	
-	JR	Z,skip_2BE4	
-;-------------------------------
-	DJNZ	L2BBA	
-;-------------------------------
-skip_2BE4:
-;-------------------------------
-	POP	HL	
-	JP	L299A
-;===============================
-PRINT_007:	
-	LD	A,I		; read graphics mode	
-	RRCA	
-;-------------------------------
-	JR	NC,skip_2BF5	
-	XOR	A,A		; A = 0	
-	LD	(DF_SZ),A	; SET DF_SZ	
-	INC	A	
-	LD	(G007_FLAG_1),A	
-skip_2BF5:	
-;-------------------------------
-	CALL	PRINT		; [PRINT]	
-	XOR	A,A		; A = 0	
-	LD	(G007_FLAG_1),A	
-	LD	(IY+DF_SZ-RAMBASE),2	 ; The lines above have no return or jump statements	
-; They will fall into copy of the end of the STK_TO_BC routine	
-; Perhaps a cunning trick to save two bytes? :-)
-;===============================
-;===============================
-;===============================
-
-	org	ROM_PATCH_0C00
-;
-; 256-byte block patched in to ZX81 BASIC at 0C00 hex	
-; This cleverly alters the language syntax,	
-; adding parameters and/or pointing to new routines.	
-;	
-	LD	C,A	; from the end of the STK_TO_BC routine	
-	RET	
-;===============================
-; THE 'STK_TO_A' SUBROUTINE  (duplicated for the paged ROM)	
-	
-; This subroutine 'loads' the A register with the floating point number held at the top of the calculator stack. The number must be in the range 00-FF.	
-;-------------------------------
-STK_TO_A:
-
-#if NOT_G007
-;	CALL	15CD,FP_TO_A	;     This is what the disassembly book says	
-#else
-	CALL	L0CA0		;  new in G007
-#endif
-	JP	C,REPORT_B
-;-------------------------------
-	LD	C,$01	
-	RET	Z	
-	LD	C,$FF	
-	RET	
-;===============================
-	
-; THE 'SCROLL' COMMAND ROUTINE (duplicated for the paged ROM)	
-	
-; The first part of the routine sets the correct values of DF_CC and S_POSN to allow for the next printing to occur at the start of the bottom line + 1.	
-	
-; Next the end address of the first line in the display file is identified and the whole of the display file moved to overwrite this line.	
-;-------------------------------
-
-SCROLL:
-mark_0C0E:
-	LD	B,(IY+DF_SZ-RAMBASE)		; ???	Disassembly book says	LD	B,(DF_SZ)	
-	LD	C,CHARS_HORIZONTAL + 1  ;change here, $21 originally
-	CALL	LOC_ADDR	
-	CALL	ONE_SPACE	
-	LD	A,(HL)	
-	LD	(DE),A	
-
-	INC	(IY+S_POSN_hi-RAMBASE)		; 	
-
-	LD	HL,(D_FILE);	
-	INC	HL	
-	LD	D,H	
-	LD	E,L	
-	CPIR	
-	JP	RECLAIM_1
-;===============================	
-;	
-; THE SYNTAX TABLES	
-;	
-; i) The offset table	
-;	
-; There is an offset value for each of the BASIC commands and by	
-; adding this offset to the value of the address where it is found,	
-; the correct address for the command in the parameter table is	
-; obtained.	
-	
-; 2C29: 8B 8D 2D 7F 81 49 75
-
-mark_0C29:
-offset_t:
-
-;		expression	  address	byte offset expected
-	defb	P_LPRINT-$	; 0CB4		$8B
-	defb	P_LLIST-$	; 0CB1	;	$8D	;
-	defb	P_STOP-$	; 0C58	;	$2D	;
-	defb	P_SLOW-$	; 0CAB	;	$7F	;
-	defb	P_FAST-$	; 0CAE	;	$81	;
-	defb	P_NEW-$		; 0C77	;	$49	;
-	defb	P_SCROLL_007-$	; 0CA4	;	$75	;	
-							; 2C30: 5F 40 42 2B 17 1F 37 52		
-	defb	P_CONT-$	; 0CBF	;	$5F	;
-	defb	P_DIM-$		; 0C71	;	$40	;
-	defb	P_REM-$		; 0C74	;	$42	;
-	defb	P_FOR-$		; 0C5E	;	$2B	;
-	defb	P_GOTO-$	; 0C4B	;	$17	;
-	defb	P_GOSUB-$	; 0C54	;	$1F	;
-	defb	P_INPUT-$	; 0C6D	;	$37	;
-	defb	P_LOAD-$	; 0C89	;	$52	;
-							; 2C38: 45 0F 6D 2B 44 2D 5A 3B	
-	defb	P_LIST-$	; 0C7D	;	$45	;
-	defb	P_LET-$		; 0C48	;	$0F	;
-	defb	P_PAUSE-$	; 0CA7	;	$6D	;
-	defb	P_NEXT-$	; 0C66	;	$2B	;
-	defb	P_POKE-$	; 0C80	;	$44	;
-	defb	P_PRINT-$	; 0C6A	;	$2D	; Same as normal ZX81	
-	defb	P_PLOT_007-$	; 0C98	;	$5A	;
-	defb	P_RUN-$		; 0C7A	;	$3B	;
-							; 2C40: 4C 45 0D 52 54 4D 15 6A	
-	defb	P_SAVE-$	; 0C8C	;	$4C	;
-	defb	P_RAND-$	; 0C86	;	$45	;
-	defb	P_IF-$		; 0C4F	;	$0D	;
-	defb	P_CLS-$		; 0C95	;	$52	;
-	defb	P_UNPLOT_007-$	; 0C98	;	$54	; This byte is 5A, an offset to 0C9E, in normal ZX81	
-							; NB same address as PLOT	
-	defb	P_CLEAR-$	; 0C92	;	$4D	;
-	defb	P_RETURN-$	; 0C5B	;	$15	;
-	defb	P_COPY-$	; 0CB1	;	$6A	;
-;
-;	ii) The parameter table.	
-;
-;	For each of the BASIC commands there are between 3 and 8	
-;	entries in the parameter table. The command classes for each of	
-;	the commands are given, together with the required separators and	
-;	these are followed by the address of the appropriate routine.	
-	
-	
-	; 2C48: 01 14 02 	
-mark_0C48:
-P_LET:
-	defb	_CLASS_01	; A variable is required.
-	defb	ZX_EQU		; Separator:	'='
-	defb	_CLASS_02	; An expression, numeric or string,
-				; must follow.
-	
-; 244B: 06 00 81 0E 06	
-	
-P_GOTO:
-mark_0C4B:
-	defb	_CLASS_06	; A numeric expression must follow.
-	defb	_CLASS_00	; No further operands.
-	defw	GOTO
-
-
-P_IF:	
-mark_0C4F:
-	defb	_CLASS_06	; A numeric expression must follow.
-mark_0C50			; 2C50: DE 05 AB 0D
-	defb	ZX_THEN		; Separator:	'THEN'
-	defb	_CLASS_05	; Variable syntax checked entirely
-				; by routine.
-	defw	IF
-
-
-P_GOSUB:			; mark_0C54:
-	defb	_CLASS_06	; A numeric expression must follow.
-	defb	_CLASS_00	; No further operands.
-	defw	GOSUB		; 0EB5
-	
-	; 2C58: 00 DC 0C 	
-	
-P_STOP:				; mark_0C58:
-				; 2C54: 06 00 B5 0E	
-	defb	_CLASS_00	; No further operands.
-	defw	STOP
-
-	; 2c5B: 00 D8 0E 	
-	
-P_RETURN
-	defb	_CLASS_00	; No further operands.
-	defw	RETURN
-	
-	
-	; 2c5e: 04 14	
-	
-	
-P_FOR:
-#if	0
-mark_0C5E:
-#else
-#endif
-	defb	_CLASS_04	; A single character variable must
-				; follow.
-	defb	ZX_EQU		; Separator:	'='
-	defb	_CLASS_06	; A numeric expression must follow.
-	defb	ZX_TO		; Separator:	'TO'
-	defb	_CLASS_06	; A numeric expression must follow.
-	defb	_CLASS_05	; Variable syntax checked entirely
-				; by routine.
-	defw	FOR
-
-	; 0C66: 04 00 2E 0E	
-	
-P_NEXT:				; at $0C66:
-
-	defb	_CLASS_04	; A single character variable must follow.
-	defb	_CLASS_00	; No further operands.
-	defw	NEXT
-
-	
-; 2C6A: 05 E8 2B 	
-	
-P_PRINT:
-
-mark_0C6A:
-
-
-
-	defb	_CLASS_05	; Variable syntax checked entirely
-				; by routine.
-#if NOT_G007
-	defw	PRINT		; This is the original routine
-#else
-	defw	PRINT_007	; 2BE8	This is the new routine!	
-#endif	
-	
-;	; 2C6D: 01 00 E9 0E	
-	
-
-mark_0C6D:
-
-
-P_INPUT:
-	defb	_CLASS_01	; A variable is required.
-	defb	_CLASS_00	; No further operands.
-	defw	INPUT
-
-P_DIM:
-mark_0C71:
-	defb	_CLASS_05	; Variable syntax checked entirely
-				; by routine.
-#if NOT_G007
-	defw	DIM		; 1409	Original ZX81 replaced by
-#else
-	defw	DIM_007		; 2EA7	new routine	
-#endif
-;	
-;	; 2c74: 05 6A 0D 	
-;	
-mark_0C74:
-P_REM:
-
-	defb	_CLASS_05	; Variable syntax checked entirely by routine.
-	defw	REM
-
-mark_0C77:
-P_NEW:
-	defb	_CLASS_00	; No further operands.
-	defw	NEW
-
-P_RUN:
-mark_0C7A:
-
-P_RUN:
-	defb	_CLASS_03	; A numeric expression may follow
-				; else default to zero.
-	defw	RUN
-
-P_LIST:
-#if	0
-mark_0C7D:
-#else
-#endif
-	defb	_CLASS_03	; A numeric expression may follow
-				; else default to zero.
-	defw	LIST
-
-P_POKE:				; mark_0C80:
-	defb	_CLASS_06	; A numeric expression must follow.
-	defb	ZX_COMMA	; Separator:	','
-	defb	_CLASS_06	; A numeric expression must follow.
-	defb	_CLASS_00	; No further operands.
-	defw	POKE
-
-P_RAND:				; mark_0C86:
-	defb	_CLASS_03	; A numeric expression may follow
-				; else default to zero.
-	defw	RAND
-
-P_LOAD:				; mark_0C89:
-	defb	_CLASS_05	; Variable syntax checked entirely
-				; by routine.
-	defw	LOAD
-
-P_SAVE:				; mark_0C8C:
-	defb	_CLASS_05	; Variable syntax checked entirely
-				; by routine.
-#if NOT_G007	
-	defw	SAVE		; 02F6	original
-#else
-	defw	SAVE_007	; 2F4D	new!	
-#endif	
-;	
-P_CONT:
-#if	0
-#else
-#endif
-mark_0C8F:
-	defb	_CLASS_00	; No further operands.
-	defw	CONT		; 0E7C
-;	
-P_CLEAR:			; mark_0C92:
-	defb	_CLASS_00
-#if NOT_G007	
-	defw	CLEAR		; 149A	original
-#else
-	defw	CLEAR_007	; 0EB2	new. this points outside the G007 ROM	
-#endif
-
-
-P_CLS:				; mark_0C95:
-#if NOT_G007
-	defb	_CLASS_00	; No further operands.
-;;	defw	CLS		; original	
-#else
-	defb	_CLASS_03	; A numeric expression may follow
-				; else default to zero.
-	defw	G007_CLS_N	; 2E4E	new!	
-#endif
-;	
-;	
-;	
-mark_0C98:
-
-#if	NOT_G007
-				; originally the ZX81 does this:	
-P_PLOT:				; original: plot X,Y
-	defb	_CLASS_06	; A numeric expression must follow. X
-	defb	ZX_COMMA	; Separator:	','
-	defb	_CLASS_06	; A numeric expression must follow. Y
-	defb	_CLASS_00	; No further operands.
-	defw	PLOT_UNPLOT	; 0BAF
-
-P_UNPLOT:			; original: plot X,Y
-	defb	_CLASS_06	; A numeric expression must follow. X
-	defb	ZX_COMMA	; Separator:	','
-	defb	_CLASS_06	; A numeric expression must follow. Y
-	defb	_CLASS_00	; No further operands.
-	defw	PLOT_UNPLOT	; 0BAF
-
-				; These are identical, so they could overlap
-#else
-				; The G007 saves bytes by having these
-				; identical parameter table entries overlapping:	
-				; 0C98 / 2C98: 06 1A 06 1A 06 00 26 29	
-P_PLOT_007:
-P_UNPLOT_007:
-				; new: plot N,X,Y
-	defb	_CLASS_06	; A numeric expression must follow. N
-	defb	ZX_COMMA	; Separator:	','
-	defb	_CLASS_06	; A numeric expression must follow. X
-	defb	ZX_COMMA	; Separator:	','
-L0C9C:
-	defb	_CLASS_06	; A numeric expression must follow. Y
-	defb	_CLASS_00	; No further operands.
-	defw	G007_PLOT_UNPLOT_N_X_Y		; 2926	new!
-				;
-				; by saving those bytes, can put a tiny routine here:
-L0CA0:
-	LD HL,(L0EA8)		; Inside the 'FIND_INT.' subroutine
-	JP (HL)
-#endif
-;
-; Now back to the table!	
-;	
-P_SCROLL_007
-mark_0CA4:
-	defb	_CLASS_00	
-	defw	SCROLL		; 0C0E	
-	
-
-
-P_PAUSE:
-	defb		_CLASS_06
-	defb		_CLASS_00
-#if NOT_G007
-mark_0CA9:
-;	2CA9: 0F 32 	
-	defw		PAUSE		; 0F32	original
-#else
-mark_0CA9:
-;	2CA9: AE 2E 	
-;	0CA7	
-	defw		PAUSE_007	; 2EAE	new!	
-#endif
-;	
-; 2CAB: 03 B2 2E 	
-; 0CAB	
-
-
-
-P_SLOW:
-mark_0CAB:
-#if NOT_G007
-	defb	_CLASS_00	; No further operands.
-	defw	SLOW		;	2B 0F	SLOW,0F2B	original
-#else
-	defb	_CLASS_03	; new! Extra parameter sets graphic mode	
-	defw	SLOW_007	; 2EB2	new!	
-#endif
-
-
-P_FAST:
-mark_0CAE:
-#if NOT_G007
-	defb	_CLASS_00	; No further operands.
-	defw	FAST		; 23 0F		FAST,0F23	original
-#else
-	defb	_CLASS_03	; new! Extra parameter sets graphic mode	
-	defw	FAST_007	; 2EB6	new!	
-#endif
-
-
-
-
-
-
-
-	
-;	
-;	2CB1: 03 53 2F 	
-;	
-;	0CB1
-
-P_COPY:
-#if NOT_G007
-	defb	_CLASS_00	; original
-	defw	COPY		; 0869	original
-#else
-	defb	_CLASS_03	; new!	Extra parameter sets graphic mode	
-;;;	defw	COPY_007	; 2EB6	new but wrong ???!	
-	defw	L2F53		; what the disassembler said
-#endif
-
-mark_0CB4:
-
-
-P_LPRINT:
-
-	defb	_CLASS_05	
-	defw	LPRINT		; 0ACB	
-;	
-;	;	2CB7: 03 2C 07 	
-;	0CB7	
-P_LLIST:
-	defb	_CLASS_03	
-	defw	LLIST		; 072C	
-;	
-;	
-; the rest of this page is just a copy of the usual ZX81 code	
-
-LINE_SCAN:
-L0CBA:
-;	2CBA: FD 36 01 01 CD 73	
-;	2CC0: 0A CD 95 0A 21 00 40 36	
-;	2CC8: FF 21 2D 40 CB 6E 28 0E	
-;	2CD0: FE E3 7E C2 6F 0D CD A6	
-;	2CD8: 0D C8 CF 0C CF 08 DF 06	
-;	2CE0: 00 FE 76 C8 4F E7 79 D6	
-;	2CE8: E1 38 3B 4F 21 29 0C 09	
-;	2CF0: 4E 09 18 03 2A 30 40 7E	
-;	2CF8: 23 22 30 40 01 F4 0C C5	
-;
-; which is described as follows in the ZX81 disassembly book:	
-;	
-;	THE 'LINE SCANNING' ROUTINE	
-;
-;	The BASIC interpreter scans each line for BASIC commands and as each one is found
-;	the appropriate command routine is followed.	
-;	The different parts of the routine are:
-;-------------------------------
-;	i) The LINE_SCAN entry point leads to the line number being checked for validity.	
-
-	LD      (IY+FLAGS-RAMBASE),$01		; FLAGS = 1
-        CALL    E_LINE_NO			; 
-;-------------------------------
-;	ii) The LINE_RUN entry point is used when replying to an INPUT prompt
-;	and this fact has be identified.	
-;-------------------------------
-LINE_RUN
-#if NOT_G007
-	CALL	SET_MEM		; at $14BC
-#else
-	CALL	L0A95		; JP 14BC,SET_MEM then return
-				; why it does this I do not know - KH
-#endif
-	LD	HL,ERR_NR	
-	LD	(HL),$FF	
-	LD	HL,FLAGX	
-	BIT	5,(HL)	
-	JR	Z,LINE_NULL
-;-------------------------------
-;	iii) The INPUT reply is tested to see if STOP was entered.	
-	
-	CP	$E3	
-	LD	A,(HL)	
-	JP	NZ,INPUT_RE	
-	CALL	SYNTAX_Z
-	RET	Z	
-	
-;	iv) If appropriate, report D is given.	
-	
-	RST	ERROR_1	
-	defb	$0C	
-;-------------------------------
-	;	THE 'STOP' COMMAND ROUTINE	
-	;	The only action is to give report 9.	
-;-------------------------------
-STOP
-	RST	ERROR_1	
-	defb	8	
-;-------------------------------
-	; v) A return is made if the line is 'null'.
-;-------------------------------
-LINE_NULL:
-
-mark_0CDE:
-
-; old software from disassembly book:
-
-	RST	GET_CHAR
-	LD	B,0
-	CP	ZX_NEWLINE
-	RET	Z
-	
-	; vi) The first character is tested so as to check that it is a command.	
-
-	LD	C,A	
-	RST	NEXT_CH
-	LD	A,C	
-	SUB	$E1
-#if NOT_G007
-	JR	C,REPORT_C	; $0D9A as per the book
-#else
-	JR	C,REPORT_C_007	; $0D26 in G007 systems
-#endif	
-;-------------------------------
-	; vii) The offset for the command is found from the offset table.	
-	
-	LD	C,A	
-	LD	HL,offset_t	; $0C29	
-	ADD	HL,BC	
-	LD	C,(HL)	
-	ADD	HL,BC	
-	JR	GET_PARAM
-	
-	; viii) The parameters are fetched in turn by a loc that returns to 0CF4.
-	; The separators are identitied by the test against +0B.	
-;-------------------------------
-mark_0CF4:
-
-SCAN_LOOP:
-	LD	HL,(T_ADDR)	
-GET_PARAM:
-	LD	A,(HL)	
-	INC	HL	
-	LD	(T_ADDR),HL	
-	LD	BC,SCAN_LOOP	
-	PUSH	BC	
-
-;
-;	there is more to this routine but the patch ends here
-;
-; end of patch	
-;-------------------------------
-	org	$2D00
-
-
-; bits shifting right within a byte:	
-;	
-	defb	%10000000	; $80
-	defb	%01000000	; $40
-	defb	%00100000	; $20
-	defb	%00010000	; $10
-	defb	%00001000	; $08
-	defb	%00000100	; $04
-	defb	%00000010	; $02
-	defb	%00000001	; $01
-;-------------------------------
-L2D08:
-
-SLOW_FAST_007:		; at $2D08	
-	
-	CALL	L2BF7	; ??? not a valid opcode address?	
-	JP	SLOW_FAST	; old routine	
-;-------------------------------
-L2D0E:	
-	LD	(MARGIN),A	; 	
-	EX	DE,HL	
-	LD	HL,10
-	ADD	HL,SP	
-	LD	A,(HL)	
-	INC	A	
-	AND	$F0	
-	SUB	$D0	
-	LD	C,A	
-	INC	HL	
-	LD	A,(HL)	
-	SUB	4	
-	OR	A,C	
-	LD	C,A	
-	LD	A,(CDFLAG)	; 	
-	RLCA	
-	SBC	A,A	
-	AND	A,C	
-	JR	NZ,L2D3B	
-;-------------------------------
-	LD	HL,(VARS)	; 	
-	LD	BC,-(CHARS_HORIZONTAL+1)	; $FFDF	
-	ADD	HL,BC	
-	SET	7,H	
-	LD	(G007_DISPLAY_ADDRESS_LO_RES_LAST_LINE),HL	
-	LD	A,1	
-	JR	L2D49	
-;-------------------------------
-L2D3B:	
-	LD	HL,(D_FILE)	; GET D_FILE	
-	LD	BC,(G007_DISPLAY_OFFSET_FROM_DFILE_LESS_9)	
-	ADD	HL,BC	
-	SET	7,H	
-	LD	(G007_DISPLAY_ADDRESS_LESS_9),HL	
-	XOR	A,A	; A = 0	
-;-------------------------------
-L2D49:
-	LD	(G007_FLAG_3),A
-	DEC	HL	
-	LD	A,(HL)	
-	EX	DE,HL	
-	RET
-;-------------------------------
-	LD	A,(G007_FLAG_3)
-	DEC	A	
-	JP	NZ,L2D73	; [11635]	
-;-------------------------------
-	LD	A,G007_INT_REG_VALUE_FOR_LO_RES_GRAPHICS	
-	LD	I,A						; Interrupt register = 0x1E sets low res mode	
-	ADC	HL,HL	
-	LD	HL,(G007_DISPLAY_ADDRESS_LO_RES_LAST_LINE)	
-	
-	LD	BC,$0108	
-	LD	A,$FE	
-	CALL	DISPLAY_5;	
-	LD	A,G007_INT_REG_VALUE_FOR_HI_RES_GRAPHICS	
-	LD	I,A						; Interrupt register = 0x1F sets high res mode	
-	LD	A,(MARGIN)					; GET MARGIN	
-	SUB	8	
-	JR	L2D77
-;-------------------------------
-L2D73:	
-	DEC	HL	
-	LD	A,(MARGIN)					; GET MARGIN	
-;-------------------------------
-L2D77:	
-	LD	C,A	
-	POP	IX
-;-------------------------------
-	BIT	7,(IY+CDFLAG-RAMBASE)				; makes FD CB 3B 7E
-	JP	NZ,L029D					; []*BIOS ROM*	
-;-------------------------------
-	
-; This jumps into the middle of the DISPLAY_3, where it meets this code:	
-;029D   79               LD A,C  	
-;029E   ED;44            NEG                  	
-;02A0   3C               INC A                	
-;02A1   08               EX AF,AF'            	
-;02A2   D3;FE            OUT (IO_PORT_KEYBOARD_RD),A         ; ZX81 NMI GENERATOR on, for SLOW mode	
-;02A4   E1               POP HL               ; restore registers	
-;02A5   D1               POP DE               	
-;02A6   C1               POP BC               	
-;02A7   F1               POP AF               	
-;02A8   C9               RET  	
-;-------------------------------
-	LD	A,$FE		
-	LD	B,$01	
-	LD	HL,HALT_AT_2D9A	
-	CALL	LOAD_R_AND_WAIT_FOR_INT
-	ADD	HL,HL		; double HL
-	NOP	
-	LD	E,A	
-	LD	HL,(G007_DISPLAY_ADDRESS_LESS_9)	
-	SET	7,H	
-	JP	(IX)	
-;===============================
-LOAD_R_AND_WAIT_FOR_INT		; mark_2D95
-				; Sets up the refresh register and waits for an interrupt:
-	LD	R,A		; Refresh row counter := accumulator	
-	LD	A,221		; 221 = $DD
-	EI			; Enable interrupts, then drop into HALT	
-;-------------------------------
-HALT_AT_2D9A:
-
-	HALT	
-;===============================
-; Copy two pages of ZX81 BASIC ROM to RAM patch areas,	
-; then modify bytes as controlled by a table of offsets and values	
-; This uses less memory than two whole pages of ROM	
-; If the RAM patches are not changed thereafter,	
-; one might be able to use a 16K ROM to hold two different versions of the ZX81 BASIC space,	
-; one with the 'RAM' patch and one without.	
-; The RAM testing would have to be disabled, because the ROM would cause it to fail.	
-;-------------------------------
-#if NOT_G007
-ZX81_COPY:
-#else
-G007_COPY:	
-#endif
-;-------------------------------
-; First check RAM by loading 512 bytes RAM from $2200 to $23FF with value 1,
-; and decrement them to zero to test they are working RAM	
-;	
-	LD	HL,RAM_PATCH_2200	; destination RAM patch 2	
-	LD	A,$24	
-;-------------------------------
-mark_2DA0:
-G007_COPY_LOOP:	
-	LD	(HL),1			; try writing the value 1 to a byte in RAM patch 2	
-	DEC	(HL)			; try decrementing it to zero	
-	JR	Z,G007_COPY_SKIP	; if result is zero, skip error code report	
-;-------------------------------
-	RST	$08
-	defb	$1A ; RST8 Arg		; Error Code:'R' (ZX81 on-board 1K/2K RAM not found)	
-;-------------------------------
-G007_COPY_SKIP
-mark_2DA7:	
-	INC	HL			; next address	
-	CP	H			; has HL reached $2400 (yet?	
-	JR	NZ,G007_COPY_LOOP	; no, repeat. 	
-;-------------------------------
-	; HL is now $2400	
-	; Copy 256 bytes from BASIC ROM to RAM patch 1:	
-	LD	H,L			; HL is now $0000 (data source is start of ZX81 BASIC ROM)	
-	LD	DE,RAM_PATCH_2000	; data destination	
-	LD	BC,$0100		; 256 bytes	
-	LDIR				; (HL) -> (DE) 256 times	
-;-------------------------------
-	; HL is now $0100	
-	; DE is now $2100	
-	; BC is now $0000	
-;-------------------------------
-	INC	H	; HL is now $0200 	
-	INC	D	; DE is now $2200	
-	INC	B	; BC is now $0100	
-	LDIR	; copy another 256 bytes to RAM patch 2	
-;-------------------------------
-	LD	HL,PRINT_CH	; src = the original ZX81 print character routine	
-	LD	DE,G007_V23A0	; dst = 	
-	LD	BC,$0060	; 60hex = 96 bytes, so stops just before 0851 (the 'LPRINT_CH routine)	
-	LDIR	; move	
-	; BC is now $0000	
-	LD	D,$20	; DE is now $20??	
-	LD	HL,TABLE_ONE	; copy data from this table:
-LOOP_2DC9:
-	LD	B,(HL)	; BC is now $0A00 (seems way too many bytes)	
-	JR	G007_TABLE_END_TEST	; branch to end-of-table test	
-;-------------------------------
-G007_TABLE_ONE_LOOP:	
-	LD	E,(HL)	; Get the offset	
-	INC	HL	; next byte is data	
-	LD	A,(HL)	; Get the data byte	
-	LD	(DE),A	; ($2000+offset) = data byte
-;-------------------------------
-G007_TABLE_END_TEST:
-mark_2DD0:
-	INC	HL	; next offset	
-	DJNZ	G007_TABLE_ONE_LOOP	; repeat until BC is zero	
-;-------------------------------
-	INC	D	; D becomes $21	
-	BIT	2,D	; test bit 2 (has D incremented to $23 ?)	
-	JR	Z,LOOP_2DC9	
-	
-	RET	
-;===============================	
-; Delete Display File:	
-;	
-G007_DELETE_DISPLAY_FILE:	
-	CALL	SET_FAST;	
-	LD	HL,$3E87	
-	CALL	LINE_ADDR;	
-	RET	NZ
-;-------------------------------
-	EX	DE,HL	
-	LD	HL,(NXT_LINE)	; 	
-	BIT	6,(HL)	
-	JR	Z,L2DEF	
-;-------------------------------
-	LD	(NXT_LINE),DE	;
-;-------------------------------
-L2DEF:	
-	LD	HL,(D_FILE)	; 
-	JP	RECLAIM_1	; exit	
-;-------------------------------
-L2DF5:	
-	CALL	G007_DELETE_DISPLAY_FILE	
-	LD	BC,$1992	; 6546 decimal = 	
-	LD	HL,(D_FILE)	; 	
-	DEC	HL	
-	CALL	MAKE_ROOM	
-	
-	LD	A,ZX_NEWLINE	
-	LD	(DE),A	; to DE	
-	INC	DE	
-	LD	(DE),A	; and DE+1	
-	
-	INC	HL	; HL += 2	
-	INC	HL	
-	
-	LD	(HL),$3E	; (HL++) = $3E	'Y'	
-	INC	HL	
-	LD	(HL),$87	; (HL++) = $87	
-	INC	HL	
-	LD	(HL),$8D	; (HL++) = $8D	
-	INC	HL	
-	LD	(HL),$19	; (HL++) = $19	';'	
-	INC	HL	
-	LD	(HL),A	; (HL++) = ZX_NEWLINE	
-	INC	HL	
-	LD	(HL),A	; (HL++) = ZX_NEWLINE
-;-------------------------------
-L2E18:
-	CALL	SLOW_FAST	; 
-	LD	A,1	
-	JR	G007_CLS_HI_RES	
-;-------------------------------
-G007_CHECK_AND_SET_UP_DISPLAY_FILE:	
-	;	
-	LD	HL,(V2265)	; in the RAM page 2 area ! Usually $4027	
-	LD	DE,$BFD9	; 3FD9 + 32K, or -16423 = 16K - 39 bytes	
-	ADD	HL,DE	
-
-	LD	A,(V2264)	
-	SUB	CHARS_HORIZONTAL+1		; bytes per screen line
-	
-	OR	A,H	
-	OR	A,L	
-
-	CALL	NZ,G007_COPY	
-	LD	HL,(D_FILE)	; GET D_FILE	
-	LD	A,ZX_NEWLINE	
-
-	DEC	HL	
-	DEC	HL	
-	CP	(HL)		; pointing to a HALT?	
-
-	CALL	NZ,L2DF5	; no, 	
-				; else yes	
-	LD	HL,(D_FILE)	; GET D_FILE	
-	LD	DE,(G007_DISPLAY_OFFSET_FROM_DFILE_LESS_9)
-	ADD	HL,DE	
-	LD	(G007_DISPLAY_ADDRESS_LESS_9),HL	
-
-	LD	DE,9		; HL += 9
-	ADD	HL,DE	
-
-	LD	(G007_DISPLAY_ADDRESS),HL	
-	RET	
-;-------------------------------
-G007_CLS_N:	
-;	
-	CALL	STK_TO_A	
-	RET	NZ		; drop through if zero flag set	
-;-------------------------------
-; Clear The Screen:	
-;	
-G007_CLS_A:	
-	DEC	A	
-	JP	M,CLS		; if A was zero	
-;-------------------------------
-G007_CLS_HI_RES:	
-	PUSH	AF	
-	CALL	G007_CHECK_AND_SET_UP_DISPLAY_FILE	
-	POP	AF	
-;-------------------------------
-	CP	2	
-	LD	BC,(G007_DISPLAY_HEIGHT)	
-	LD	HL,(D_FILE)	
-	JR	NC,L2E96	
-;-------------------------------
-	DEC	A
-	
-	INC	HL	
-	LD	(DF_CC),HL	; Addr. for PRINT AT position
-	DEC	HL	
-
-	DEC	HL	
-	DEC	HL	
-
-	LD	E,0		; E = 0 is byte to fill screen
-;-------------------------------
-loop_2E70:	
-	LD	B,16			; 16
-	DEC	HL
-	LD	(HL),E			; but writes 2 bytes for each loop
-	DEC	HL	
-	LD	(HL),E			; perhaps to reduce loop overhead?
-;-------------------------------
-loop_2E76:	
-	DEC	HL	
-	LD	(HL),A			; writes A twice over	
-	DEC	HL	
-	LD	(HL),A	
-	DJNZ	loop_2E76	
-;-------------------------------
-	DEC	C	
-	JR	NZ,loop_2E70	
-;-------------------------------	; C is now zero
-	LD	B,9			; BC is now $0900
-	LD	A,1	
-;-------------------------------
-loop_2E83:	
-	DEC	HL	
-	LD	(HL),E			; (--HL) = E while --BC
-	DJNZ	loop_2E83	
-;-------------------------------	; BC is now zero
-	LD	HL,G007_LINE_TYPE	
-	LD	B,20			; decimal 20
-	DEC	A	
-	JR	Z,loop_2E83	
-;-------------------------------
-	LD	HL,256*CHARS_VERTICAL + CHARS_HORIZONTAL + 1
-	LD	(S_POSN),HL		; SET S_POSN	
-	RET	
-;===============================
-L2E96:	
-	RET	NZ	
-
-	DEC	HL			; HL -= 2
-	DEC	HL
-;------------------------------- outer loop
-loop_2E99:	
-	LD	B,32			; 32 bytes to invert
-	DEC	HL			; HL -= 2
-	DEC	HL			; skips past 2 HALT characters
-
-;------------------------------- inner loop
-loop_2E9D:	
-	DEC	HL
-	
-	LD	A,(HL)			; read
-	CPL				; invert (one's complement)
-	LD	(HL),A			; write
-
-	DJNZ	loop_2E9D	
-;-------------------------------
-	DEC	C			; C is obviously the number of horizontal lines to invert
-	JR	NZ,loop_2E99	
-;-------------------------------
-	RET
-;-------------------------------
-mark_2EA7:
-DIM_007:			; 2EA7
-	LD	HL,($0A96)	
-	LD	A,$4D	
-	JR	L2EE3	
-;-------------------------------
-PAUSE_007:	
-	LD	A,$DD	
-	JR	skip_2EE0	
-;-------------------------------
-SLOW_007:			; 2EB2
-	LD	A,$D6	
-	JR	skip_2EB8	
-;-------------------------------
-FAST_007:			; 2EB6	
-	LD	A,$CE	
-;-------------------------------
-skip_2EB8:
-	PUSH	AF	
-
-	CALL	STK_TO_A	
-	LD	B,$1E	
-	DEC	A	
-	CP	6	
-	JR	NC,skip_2EDC	
-;-------------------------------
-	SRL	A	
-	LD	H,A	
-;-------------------------------
-	JR	Z,skip_2ECA	
-	LD	A,1
-skip_2ECA:	
-;-------------------------------
-	PUSH	AF	
-	SBC	A,A	
-	LD	L,A	
-	RES	1,H	
-	DEC	H	
-	LD	(G007_RESTART),HL	
-	CALL	G007_CHECK_AND_SET_UP_DISPLAY_FILE	
-	LD	B,G007_INT_REG_VALUE_FOR_HI_RES_GRAPHICS	
-	POP	AF
-	
-	LD	(G007_FLAG_2),A
-;-------------------------------
-skip_2EDC:
-	LD	A,B		;	
-	LD	I,A		; I = B = G007_INT_REG_VALUE_FOR_HI_RES_GRAPHICS = set video mode 	
-	POP	AF
-;-------------------------------
-skip_2EE0:
-	LD	HL,($0D71)				; inside the 'COMMAND CLASS 2' routine of the ZX BASIC ROM
-;-------------------------------
-L2EE3:
-	ADD	A,L	
-	LD	L,A	
-	JP	(HL)	
-	
-	LD	D,A	
-	LD	A,(S_POSN)	; 	
-	AND	$80	
-	JP	L2B6C	
-;===============================
-L2EEF:							; print a character on high-res screen perhaps?
-	LD	A,D	
-	POP	DE	
-
-	EXX
-;-------------------------------
-	PUSH	HL	
-	PUSH	DE	
-	PUSH	BC
-;-------------------------------
-	LD	HL,(G007_CHAR_TABLE_ADDR_0_63)
-	ADD	A,A					; if (A < 128) goto 
-	JR	NC,skip_2F06				
-;-------------------------------			;
-	LD	HL,(G007_CHAR_TABLE_ADDR_128_159)	
-	BIT	6,A
-	JR	Z,skip_2F06	
-;-------------------------------
-	LD	HL,(G007_USR_DEF_CHR_TAB_LESS_256)	
-	CCF	
-;-------------------------------
-skip_2F06:
-	EX	DE,HL				; DE now points to the selected charater table
-
-	LD	L,A				; HL = A
-	LD	H,0	
-
-	SBC	A,A				; A = carry
-	LD	C,A				; 
-;-------------------------------
-	LD	A,(G007_RESTART)		; invert this variable
-	CPL	
-	AND	A,(IY+G007_RESTART+1-RAMBASE)	
-;-------------------------------
-	XOR	A,C	
-	LD	C,A
-	
-	ADD	HL,HL				; HL *= 4
-	ADD	HL,HL	
-	ADD	HL,DE				; HD += DE
-
-	LD	B,8	
-
-	EXX	
-	PUSH	DE	
-	RET	
-;===============================
-L2F1D:					; The copied and modified PRINT_CH / WRITE_CH jumps here from $23FF	
-	DEC	(IY+S_POSN-RAMBASE)	; Line and Column for PRINT AT
-	LD	A,24			; 24 character rows per screen	
-	SUB	B	
-	LD	B,A	
-;
-	ADD	A,A
-	ADD	A,A	
-	ADD	A,A
-	LD	L,A		; L = A * 8
-;	
-	LD	A,(G007_DISPLAY_HEIGHT)	
-	SUB	L			; A = G007_DISPLAY_HEIGHT - something
-	RET	C			; return if beyond limit
-;-------------------------------
-	LD	A,CHARS_HORIZONTAL+1			; 32 video bytes plus HALT ?
-	SUB	C	
-	LD	C,A	
-;------------------------------- 
-	LD	H,0
-	ADD	HL,HL	
-	ADD	HL,BC	
-	LD	BC,(G007_DISPLAY_ADDRESS)	
-	ADD	HL,BC			; HL = L*2 + BC + G007_DISPLAY_ADDRESS:
-;-------------------------------
-	CALL	L2EEF	
-	LD	BC,$0022		; B = 0, C = 34
-	EXX
-;-------------------------------
-COPY_007:
-loop_2F41:					;
-	LD	A,C	
-	XOR	A,(HL)	
-	EXX	
-	LD	(HL),A	
-	ADD	HL,BC	
-	EXX	
-	INC	HL	
-	DJNZ	loop_2F41	
-;-------------------------------
-	JP	L299A	
-;-------------------------------
-SAVE_007:				; 2F4D
-	CALL	G007_DELETE_DISPLAY_FILE	
-	JP	SAVE	
-;-------------------------------
-L2F53:
-	CALL	STK_TO_A	
-	RET	NZ	
-	
-	DEC	A	
-	JP	M,COPY			; A was zero, jump to low-res copy-to-printer
-;-------------------------------
-	CALL	G007_CHECK_AND_SET_UP_DISPLAY_FILE	; check we have a display
-	CALL	SET_FAST			; print in FAST mode!
-	LD	A,(G007_DISPLAY_HEIGHT)	
-	LD	B,A				; B = (G007_DISPLAY_HEIGHT)
-	LD	HL,(G007_DISPLAY_ADDRESS)	
-	XOR	A,A				; A = 0	
-	LD	E,A				; E = 0	
-	OUT	(ZX_PRINTER_PORT),A	
-;-------------------------------
-loop_2F6C:	
-	LD	A,$7F				; looks pointless
-	IN	A,(IO_PORT_KEYBOARD_RD)	
-	RRCA	
-	JP	NC,$0886		; []*BIOS ROM* between 0880 COPY-BRK and 0888 REPORT-D2	
-	IN	A,(ZX_PRINTER_PORT)	
-;-------------------------------
-loop_2F76:	
-	ADD	A,A	
-	JP	M,L2FAD	
-;-------------------------------
-	JR	NC,loop_2F6C	
-;-------------------------------
-	LD	C,$20	; 32
-;-------------------------------
-loop_2F7E:	
-	PUSH	BC	
-	LD	C,(HL)	
-	LD	B,8
-;-------------------------------	; outer loop
-loop_2F82:	
-	RLC	C	
-	RRA	
-	OR	A,E	
-	LD	D,A	
-;-------------------------------	; inner loop
-loop_2F87:	
-	IN	A,(ZX_PRINTER_PORT)	; read printer port bit 0 into carry flag	
-	RRA	
-	JR	NC,loop_2F87		; repeat while bit is zero
-;-------------------------------
-	LD	A,D	
-	OUT	(ZX_PRINTER_PORT),A	; D register to printer
-	DJNZ	loop_2F82	
-;-------------------------------
-	INC	HL	
-	POP	BC	
-	DEC	C	
-	JR	NZ,loop_2F7E	
-;-------------------------------
-	INC	HL	
-	INC	HL	
-	LD	A,3	
-;-------------------------------
-	CP	B	
-	JR	C,skip_2F9F	
-;-------------------------------
-	LD	E,A	
-	DEC	E
-skip_2F9F:
-;-------------------------------
-loop_2F9F:	
-	IN	A,(ZX_PRINTER_PORT)	; read printer port bit 0 into carry flag
-	RRA	
-	JR	NC,loop_2F9F		; repeat while bit is zero
-;-------------------------------
-	LD	A,E	
-	OUT	(ZX_PRINTER_PORT),A	; E register to printer
-	DJNZ	loop_2F6C	
-;-------------------------------
-	LD	A,4	
-	OUT	(ZX_PRINTER_PORT),A	
-;-------------------------------
-L2FAD:	
-	JP	SLOW_FAST	; normal
-	EI	
-	DJNZ	loop_2F76	
-;-------------------------------
-	defb	$3E			; something to do with the table below?
-;-------------------------------
-TABLE_ONE:
-;	
-; this table is copied to offsets from $2000, $2200, and $2300	
-;-------------------------------
-; Modify 9 bytes in page 20xx / 00xx:	
-;-------------------------------
-L2FB4	:
-	defb	(9+1)			; Modify 9 bytes in page 20xx / 00xx:
-;-------------------------------
-;	Original routine 	Modifications made in page 00xx	
-;	
-L2FB5:
-;	0011   C2;F1;07         JP	NZ,PRINT_CH	; old	
-;	0011   C2;A0;23         JP	NZ,L23A0	; new, jump somewhere in RAM ???	
-
-	defb	$12
-	defb	$A0
-	defb	$13
-	defb	$23
-;-------------------------------
-L2FB9
-;	0014	F5	07	JP	PRINT_SP	; $07F5
-;	2014	A4	23	JP 	L23A4		; new, jumps to somewhere in RAM
-
-	defb	$15
-	defb	$A4        
-	defb	$16
-	defb	$23
-;-------------------------------
-;	003F   CB;D9            SET	3,C	; old	
-;	003F   CB;C1            SET	0,C	; new	
-
-L2FBD:	defb	$40
-L2FBE:	defb	$C1
-;-------------------------------
-;	005F   CD;07;02         CALL	SLOW_FAST	; 0207 is old	
-;	005F   CD;08;2D         CALL	SLOW_FAST_007	; 2D08 is new
-
-L2FBF:	defb	$60
-L2FC0:	defb	$08
-L2FC1:	defb	$61
-L2FC2:	defb	$2D
-;-------------------------------
-;	0074   2A;0C;40         LD	HL,(D_FILE)	
-;	0074   2A;06:23         LD	HL,(G007_DISPLAY_ADDRESS_LESS_9)       ; new	
-
-L2FC3:	defb	$75
-L2FC4:	defb	$06
-	defb	$76
-L2FC6:	defb	$23
-;-------------------------------
-;	Modifications made in page 02xx	
-;-------------------------------
-L2FC7:	defb	$01
-	defb	$0A
-
-;	0253	06;0B	LD B,$0B
-;	2253	06;02	LD B,$02
-
-L2FC9	defb	$54
-	defb	$02
-;-------------------------------
-;	0283	01;01;19	LD BC,$1901
-;	2283	01;01;C1	LD BC,$C101
-L2FCB:	defb	$85
-	defb	$C1
-;-------------------------------
-;	027E	CD;92;02	CALL DISPLAY_3
-;	227E	CD;73;2D	CALL L2D73	
-;
-L2FCD:	defb	$7F
-	defb	$73
-L2FCF:	defb	$80
-	defb	$2D
-;-------------------------------
-;	028C	CD;92;02	CALL $0292	; [DISPLAY-3]
-;	228C	CD;50;2D	CALL $2D50
-L2FD1:	defb	$8D
-L2FD2:	defb	$50
-L2FD3:	defb	$8E
-L2FD4:	defb	$2D
-;-------------------------------
-;	02E3	32;28;40	LD ($4028),A	; SET MARGIN
-;	22E3	C3;0E;2D	JP L2D0E
-L2FD5:	defb	$E3
-L2FD6:	defb	$C3
-	defb	$E4
-	defb	$0E
-L2FD9:	defb	$E5
-L2FDA:	defb	$2D
-;-------------------------------
-L2FDB:	defb	$13		; some kind of marker?
-;-------------------------------
-;	
-;	Original routine 	Modifications made to the copy of the PRINT-CH routines:	
-;	
-;	
-;	Variables in the sparsely populated G007 RAM areas	
-;
-; Initialise 18 (decimal, = 12 in hex)RAM variables at $23xx:	
-;
-;	2FE0	E6	0A	;	23E6	0A
-;	2FE2	55	0D	;	2355	0D
-;	2FE4	1E	0F	;	231E	0F	
-;	2FE6	16	20	;	2316	20
-;	2FE8	10	07	;	2310	07			
-;	2FEA	11	08	;	2311	08				
-;	2FEC	18	C0	;	2318	C0
-;
-;------------------	; G007_DISPLAY_OFFSET_FROM_DFILE_LESS_9 = E675 (6675 echoed in top 32K ???)
-L2FDC:	defb	$00	;	2300	75
-	defb	$75
-;------------------
-L2FDE:	defb	$01	;	2301	E6
-	defb	$E6
-;------------------
-L2FE0:	defb	$0A         
-;------------------
-L2FE1:	defb	$55	;	2355	0D
-L2FE2:	defb	$0D
-;------------------
-L2FE3:	defb	$1E	;	231E	0F
-L2FE4:	defb	$0F
-;------------------
-	defb	$1E	; some kind of marker?
-;------------------
-L2FE6:	defb	$16	;	2316	20           
-	defb	$20
-;------------------	; G007_PLOT_ROUTINES_VECTOR = G007_PLOT_ROUTINES_VECTOR_DEFAULT = $0807
-L2FE8:	defb	$10	;	2310	07	
-	defb	$07
-;------------------
-L2FEA:	defb	$11	;	2311	08
-	defb	$08
-;------------------
-L2FEC:	defb	$18	;	2318	C0	
-	defb	$C0
-;------------------
-L2FEE:	defb	$35	;	2335	EE	
-	defb	$EE
-;------------------
-L2FF0:	defb	$36	;	2336	55
-	defb	$55
-;------------------
-L2FF2:	defb	$37	;	2337	C6
-	defb	$C6
-;------------------
-;	The values below were seen in RAM but are not initialised from this table:	
-;	
-;	2306	84	4084	G007_DISPLAY_ADDRESS_LESS_9	
-;	2307	40	
-;	2308	8D	408D	G007_DISPLAY_ADDRESS	
-;	2309	40	
-;	230A	55 00	55,00	G007_TRIANGLE_TEXTURE	
-;	230C	00	1E00	Character table address for CHR$0-63	
-;	230D	1E	
-;	230E	00	1E00	Character table address for CHR$128-159	
-;	230F	1E
-;------------------
-;	 Modding offsets in copied code:
-;------------------
-;	07FD	CD	08	08	CALL $0808	; [ENTER-CH]	
-;	23AC	CD	E6	2E	CALL $2EE6	
-;
-L2FF4:	defb	$AD
-	defb	$E6
-	defb	$AE
-	defb	$2E
-;------------------
-;	0843	FD	35	39	DEC (IY+SPOSN-RAMBASE)	
-;	23F2	C3	1D	2F	JP $2F1D
-;
-L2FF8:	defb	$F2
-	defb	$C3
-
-	defb	$F3
-	defb	$1D
-
-	defb	$F4
-	defb	$2F
-;------------------
-;
-;	083E	77	LD (HL),A	; WRITE-CH
-;	23ED	00	NOP		; WRITE-CH modified!
-;
-L2FFE:	defb	$ED
-	defb	$00                 
-;------------------
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-; end of g007 stuff
-;
-#endif
-
-
-
-#code   $3800,$0800
-
-
-
-
-#if 1
-
-mark_3800:	DEFB	 $21, $00, $38		;	ld	hl,Source
-mark_3803:	DEFB	 $11, $00, $78		;	ld	de,Destination
-mark_3806:	DEFB	 $01, $00, $08		;	ld	bc,MonitorSize
-mark_3809:	DEFB	 $ED, $B0		;	ldir
-mark_380B:	DEFB	 $3E, $74		;	ld	a,74
-mark_380D:	DEFB	 $32, $05, $40		;	ld	(RamtopHi),a
-mark_3810:	DEFB	 $CD, $C3, $03		;	call	New
-
-mark_3813:	DEFB	 $3E, $01		;	ld	a,01
-mark_3815:	DEFB	 $01, $93, $7B		;	ld	bc,Input_Prompt_Data
-mark_3818:	DEFB	 $CD, $02, $79		;	call	Get_A_addresses
-mark_381B:	DEFB	 $CD, $2A, $0A		;	call	Cls
-mark_381E:	DEFB	 $ED, $6B, $F8, $7F	;	ld	hl,Next_Address
-mark_3822:	DEFB	 $E9		;	jp	(hl)
-
-; Routine 0 the disassembler
-mark_3823:	DEFB	 $CD, $FD, $78, $CD, $09
-mark_3828:	DEFB	 $79, $18, $05, $16, $13, $CD, $53, $7B
-mark_3830:	DEFB	 $CD, $81, $7B, $30, $05, $AF, $32, $21
-mark_3838:	DEFB	 $40, $C9
-mark_383A:	DEFB	 $21, $7B, $40, $36, $30, $23
-mark_3840:	DEFB	 $36, $78, $CD, $2E, $7A, $CD, $72, $7A
-mark_3848:	DEFB	 $78, $FE, $76, $20, $08, $21, $F5, $7C
-mark_3850:	DEFB	 $CD, $A4, $7B, $18, $D6, $FE, $CB, $28
-mark_3858:	DEFB	 $32, $FE, $ED, $28, $38, $FE, $DD, $28
-mark_3860:	DEFB	 $44, $FE, $FD, $28, $44, $CD, $4F, $7A
-mark_3868:	DEFB	 $2E, $24, $FE, $00, $28, $11, $2E, $2C
-mark_3870:	DEFB	 $FE, $01, $28, $0E, $2C, $FE, $02, $28
-mark_3878:	DEFB	 $09, $3E, $5E, $32, $42, $7D, $2C, $7D
-mark_3880:	DEFB	 $81, $6F, $26, $7D, $6E, $EB, $CD, $D4
-mark_3888:	DEFB	 $7A, $18, $A0, $CD, $72, $7A, $CD, $4F
-mark_3890:	DEFB	 $7A, $C6, $36, $18, $EC, $CD, $72, $7A
-mark_3898:	DEFB	 $CD, $4F, $7A, $2E, $18, $FE, $01, $28
-mark_38A0:	DEFB	 $DE, $2E, $20, $18, $DA, $3E, $0B, $18
-mark_38A8:	DEFB	 $02, $3E, $0D, $32, $41, $7D, $3E, $12
-mark_38B0:	DEFB	 $32, $40, $7D, $2A, $F8, $7F, $23, $7E
-mark_38B8:	DEFB	 $21, $16, $7D, $CD, $89, $7A, $23, $CB
-mark_38C0:	DEFB	 $BE, $CD, $72, $7A, $78, $FE, $CB, $20
-mark_38C8:	DEFB	 $05, $CD, $72, $7A, $18, $BD, $CD, $4F
-mark_38D0:	DEFB	 $7A, $FE, $03, $28, $93, $F5, $C5, $FE
-mark_38D8:	DEFB	 $00, $20, $05, $3E, $06, $B8, $20, $03
-mark_38E0:	DEFB	 $CD, $72, $7A, $C1, $F1, $18, $81
-
-; Spare bytes
-mark_38E7:	DEFB	 $00
-mark_38E8:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_38F0:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_38F8:	DEFB	 $00, $00, $00, $00, $00
-
-; Start/Finish Addresses
-; prints request for input then calls input address routine
-mark_38FD:	DEFB	 $01, $93, $7B
-mark_3900:	DEFB	 $3E, $02
-
-; Get_A_addresses
-mark_3902:	DEFB	 $11, $F8, $7F, $CD, $14, $7A, $C9
-
-; Check printer
-mark_3909:	DEFB	 $11, $E1, $10, $CD, $3B, $7B, $2B
-mark_3910:	DEFB	 $7E, $21, $21, $40, $36, $83, $FD, $CB
-mark_3918:	DEFB	 $01, $CE, $FE, $1D, $C4, $2A, $0A, $C9
-
-; routine 1:	DEFB	 hex dump
-mark_3920:	DEFB	 $CD, $FD, $78, $CD, $09, $79, $21, $F9
-mark_3928:	DEFB	 $7C, $CD, $9F, $7B, $21, $7B, $40, $36
-mark_3930:	DEFB	 $33, $23, $36, $79, $CD, $81, $7B, $F8
-mark_3938:	DEFB	 $CD, $3D, $7A, $0E, $08, $CD, $72, $7A
-mark_3940:	DEFB	 $0D, $28, $0B, $CD, $81, $7B, $30, $F5
-mark_3948:	DEFB	 $16, $0B, $CD, $53, $7B, $C9
-mark_394E:	DEFB	 $CD, $48, $79, $18, $E1
-
-; routine 2:	DEFB	 write
-mark_3953:	DEFB	 $3E, $01, $01, $93, $7B
-mark_3958:	DEFB	 $CD, $02, $79, $CD, $2A, $0A, $CD, $0E
-mark_3960:	DEFB	 $0C, $CD, $3D, $7A, $11, $E8, $1C, $CD
-mark_3968:	DEFB	 $A5, $7F, $CB, $45, $28, $05, $CD, $AD
-mark_3970:	DEFB	 $7F, $18, $F7, $ED, $5B, $F8, $7F, $CD
-mark_3978:	DEFB	 $0B, $7B, $ED, $53, $F8, $7F, $3E, $76
-mark_3980:	DEFB	 $D7, $18, $DB
-
-; prints data associated with RST 08 or RST 28
-mark_3983:	DEFB	 $0D, $20, $24, $0E, $04
-mark_3988:	DEFB	 $16, $13, $CD, $53, $7B, $18, $18, $78
-mark_3990:	DEFB	 $FE, $01, $20, $1A, $21, $7B, $40, $36
-mark_3998:	DEFB	 $62, $23, $36, $7A, $16, $13, $CD, $53
-mark_39A0:	DEFB	 $7B, $21, $F9, $7C, $CD, $9F, $7B, $CD
-mark_39A8:	DEFB	 $3D, $7A, $CD, $72, $7A, $C9
-mark_39AE:	DEFB	 $FE, $05
-mark_39B0:	DEFB	 $C0, $21, $7B, $40, $36, $68, $23, $36
-mark_39B8:	DEFB	 $7A, $0E, $04, $CD, $9C, $79, $78, $FE
-mark_39C0:	DEFB	 $34, $C8, $CD, $83, $79, $18, $F7
-
-; Data Calculates absolute address for JR instructions
-; and adds number and addresses to mnemonic
-mark_39C7:	DEFB	 $CD
-mark_39C8:	DEFB	 $72, $7A, $AF, $CB, $78, $28, $01, $2F
-mark_39D0:	DEFB	 $48, $47, $2A, $F8, $7F, $09, $EB, $21
-mark_39D8:	DEFB	 $00, $7D, $7B, $CD, $89, $7A, $2B, $7A
-mark_39E0:	DEFB	 $CD, $89, $7A, $23, $CB, $BE, $2B, $18
-mark_39E8:	DEFB	 $1B, $CD, $72, $7A, $2B, $18, $15, $CD
-mark_39F0:	DEFB	 $07, $7A, $18, $10, $CD, $72, $7A, $2B
-mark_39F8:	DEFB	 $18, $03, $CD, $07, $7A, $2B, $CD, $A4
-mark_3A00:	DEFB	 $7B, $21, $0D, $7C, $C3, $A4, $7B, $21
-mark_3A08:	DEFB	 $00, $7D, $CD, $75, $7A, $CD, $72, $7A
-mark_3A10:	DEFB	 $CB, $BE, $2B, $C9
-
-; Input_Address
-mark_3A14:	DEFB	 $F5, $D5, $11, $E4
-mark_3A18:	DEFB	 $10, $CD, $3B, $7B, $7D, $BB, $28, $05
-mark_3A20:	DEFB	 $CD, $AD, $7F, $18, $F7, $D1, $CD, $21
-mark_3A28:	DEFB	 $7B, $F1, $3D, $20, $E7, $C9
-
-; Initial
-mark_3A2E:	DEFB	 $21, $42
-mark_3A30:	DEFB	 $7D, $36, $5C, $2B, $36, $09, $2B, $36
-mark_3A38:	DEFB	 $0F, $2B, $2B, $36, $E0
-
-; Next_Address
-mark_3A3D:	DEFB	 $11, $F9, $7F
-mark_3A40:	DEFB	 $21, $FE, $7C, $1A, $CD, $7F, $7A, $1B
-mark_3A48:	DEFB	 $1A, $CD, $7F, $7A, $AF, $D7, $C9
-
-; Octal
-mark_3A4F:	DEFB	 $78
-mark_3A50:	DEFB	 $E6, $07, $4F, $78, $F5, $E6, $38, $0F
-mark_3A58:	DEFB	 $0F, $0F, $47, $F1, $E6, $C0, $07, $CB
-mark_3A60:	DEFB	 $07, $C9
-
-; Cont, $RST
-mark_3A62:	DEFB	 $CD, $A1, $79, $C3, $2B, $78
-mark_3A68:	DEFB	 $0E, $04, $CD, $A1, $79, $CD, $BE, $79
-mark_3A70:	DEFB	 $18, $F3
-
-; Next_Byte
-mark_3A72:	DEFB	 $21, $FE, $7C, $ED, $5B, $F8
-mark_3A78:	DEFB	 $7F, $1A, $13, $ED, $53, $F8, $7F, $CD
-mark_3A80:	DEFB	 $89, $7A, $D7, $23, $7E, $CB, $BF, $D7
-mark_3A88:	DEFB	 $C9
-mark_3A89:	DEFB	 $47, $E6, $0F, $C6, $1C, $CB, $FF
-mark_3A90:	DEFB	 $77, $2B, $78, $E6, $F0, $1F, $1F, $1F
-mark_3A98:	DEFB	 $1F, $C6, $1C, $77, $C9
-
-; Offsets
-mark_3A9D:	DEFB	 $CB, $40, $20
-mark_3AA0:	DEFB	 $19, $CD, $B3, $7A, $13, $C9
-mark_3AA6:	DEFB	 $3E, $01
-mark_3AA8:	DEFB	 $CB, $40, $20, $1E, $18, $05, $CB, $40
-mark_3AB0:	DEFB	 $28, $0F, $13, $AF, $18, $14, $CB, $40
-mark_3AB8:	DEFB	 $28, $07, $13, $78, $CB, $87, $0F, $18
-mark_3AC0:	DEFB	 $09, $CD, $BB, $7A, $13, $C9
-mark_3AC7:	DEFB	 $78, $18
-mark_3AC8:	DEFB	 $01, $79, $13, $62, $6B, $6E, $26, $7C
-mark_3AD0:	DEFB	 $CD, $A5, $7B, $C9
-
-; Control
-mark_3AD4:	DEFB	 $1A, $F5, $E6, $07
-mark_3AD8:	DEFB	 $21, $DD, $7A, $18, $1E, $F1, $F5, $CB
-mark_3AE0:	DEFB	 $77, $28, $0D, $2A, $3E, $7D, $CB, $55
-mark_3AE8:	DEFB	 $36, $00, $23, $28, $F9, $22, $3E, $7D
-mark_3AF0:	DEFB	 $E6, $38, $0F, $0F, $CB, $0F, $28, $0C
-mark_3AF8:	DEFB	 $21, $04, $7B, $E5, $3C, $26, $7D, $6F
-mark_3B00:	DEFB	 $6E, $26, $7A, $E9, $F1, $CB, $7F, $C0
-mark_3B08:	DEFB	 $13, $18, $C9
-
-; Transfer
-mark_3B0B:	DEFB	 $C5, $7D, $2E, $E0, $95
-mark_3B10:	DEFB	 $0F, $47, $7E, $CD, $8C, $7B, $23, $86
-mark_3B18:	DEFB	 $D6, $1C, $12, $13, $23, $10, $F3, $C1
-mark_3B20:	DEFB	 $C9
-mark_3B21:	DEFB	 $C5, $06, $02, $2B, $4E, $2B, $7E
-mark_3B28:	DEFB	 $CD, $8C, $7B, $81, $D6, $1C, $12, $13
-mark_3B30:	DEFB	 $10, $F2, $C1, $3E, $76, $D7, $D7, $C9
-
-mark_3B38:	DEFB	 $11, $EF, $10, $CD, $33, $78, $26, $7E
-mark_3B40:	DEFB	 $0A, $6F, $CD, $9F, $7B, $03, $0A, $6F
-mark_3B48:	DEFB	 $03, $CD, $A4, $7B, $CD, $53, $7B, $CD
-mark_3B50:	DEFB	 $A5, $7F, $C9
-
-; Print_String
-mark_3B53:	DEFB	 $C5, $D5, $E5, $FD, $CB
-mark_3B58:	DEFB	 $21, $46, $28, $08, $ED, $4B, $39, $40
-mark_3B60:	DEFB	 $4A, $CD, $0B, $09, $11, $E0, $7F, $ED
-mark_3B68:	DEFB	 $4B, $3E, $7D, $06, $00, $79, $D6, $E0
-mark_3B70:	DEFB	 $4F, $CD, $6B, $0B, $FD, $CB, $21, $4E
-mark_3B78:	DEFB	 $28, $03, $3E, $76, $D7, $E1, $D1, $C1
-mark_3B80:	DEFB	 $C9
-
-; Check_Finish
-mark_3B81:	DEFB	 $2A, $FA, $7F, $ED, $5B, $F8, $7F
-mark_3B88:	DEFB	 $A7, $ED, $52, $C9
-mark_3B8C:	DEFB	 $D6, $1C, $07, $07
-mark_3B90:	DEFB	 $07, $07, $C9
-
-; data for input prompt messages
-mark_3B93:	DEFB	 $DD, $E3, $EB, $E3, $F2
-mark_3B98:	DEFB	 $F8, $D5, $DC, $30, $E3, $D0, $E3
-
-; Add_String, for building mnemonic
-mark_3B9F:	DEFB	 $3E
-mark_3BA0:	DEFB	 $E0, $32, $3E, $7D, $AF, $C5, $D5, $A7
-mark_3BA8:	DEFB	 $28, $0B, $CB, $7E, $20, $03, $23, $18
-mark_3BB0:	DEFB	 $F9, $3D, $23, $18, $F2, $CD, $BB, $7B
-mark_3BB8:	DEFB	 $D1, $C1, $C9
-mark_3BBB:	DEFB	 $ED, $5B, $3E, $7D, $7E
-mark_3BC0:	DEFB	 $CB, $7F, $20, $05, $CD, $CB, $7B, $18
-mark_3BC8:	DEFB	 $F2, $CB, $BF, $FE, $40, $30, $08, $12
-mark_3BD0:	DEFB	 $13, $ED, $53, $3E, $7D, $23, $C9
-mark_3BD7:	DEFB	 $23
-mark_3BD8:	DEFB	 $ED, $53, $3E, $7D, $E5, $FE, $43, $30
-mark_3BE0:	DEFB	 $06, $26, $7D, $6F, $6E, $18, $14, $FE
-mark_3BE8:	DEFB	 $64, $30, $05, $26, $7D, $6F, $18, $0B
-mark_3BF0:	DEFB	 $21, $FE, $7B, $E5, $26, $7D, $6F, $6E
-mark_3BF8:	DEFB	 $26, $79, $E9, $CD, $BB, $7B, $E1, $C9
-;
-; data for mnemonics
-; lower case are ZX inverse characters
-;          
-mark_3C00: DEFB  $A7, $A8, $A9, $AA, $AD, $B1, $C0, $A6
-mark_3C08: DEFB  $A6, $C1, $A6, $10, $43, $91, $10, $45
-mark_3C10: DEFB  $91, $E7, $E7, $C3, $C5, $C1, $C2, $62
-mark_3C18: DEFB  $A8, $45, $A8, $47, $D6, $49, $D6, $47
-mark_3C20: DEFB  $A6, $49, $A6, $29, $26, $A6, $28, $35
-mark_3C28: DEFB  $B1, $38, $28, $AB, $28, $28, $AB, $9C
-mark_3C30: DEFB  $9D, $9E, $9F, $A0, $A1, $A2, $A3, $35
-mark_3C38: DEFB  $3A, $38, $AD, $56, $31, $B1, $37, $2A
-mark_3C40: DEFB  $B9, $4B, $BD, $2F, $B5, $CD, $58, $A9
-mark_3C48: DEFB  $58, $A8, $38, $3A, $A7, $38, $C3, $26
-mark_3C50: DEFB  $33, $A9, $3D, $34, $B7, $34, $B7, $28
-mark_3C58: DEFB  $B5, $35, $34, $B5, $37, $38, $B9, $2F
-mark_3C60: DEFB  $B5, $80, $D3, $E2, $CB, $CB, $29, $AE
-mark_3C68: DEFB  $2A, $AE, $E5, $E8, $66, $1A, $A6, $4F
-mark_3C70: DEFB  $E6, $10, $5C, $11, $DA, $45, $DA, $80
-mark_3C78: DEFB  $80, $10, $41, $91, $5C, $DA, $CF, $CF
-mark_3C80: DEFB  $80, $CF, $80, $80, $80, $80, $33, $BF
-mark_3C88: DEFB  $BF, $33, $A8, $A8, $35, $B4, $35, $AA
-mark_3C90: DEFB  $B5, $B2, $47, $A8, $49, $A8, $C7, $C9
-mark_3C98: DEFB  $38, $31, $A6, $38, $37, $A6, $E4, $38
-mark_3CA0: DEFB  $C7, $27, $2E, $B9, $37, $2A, $B8, $38
-mark_3CA8: DEFB  $2A, $B9, $10, $28, $91, $33, $2A, $AC
-mark_3CB0: DEFB  $B3, $AE, $38, $C3, $58, $A8, $2E, $B2
-mark_3CB8: DEFB  $9C, $A4, $9D, $9E, $CD, $CD, $CD, $CD
-mark_3CC0: DEFB  $49, $A9, $47, $A9, $2E, $9A, $37, $9A
-mark_3CC8: DEFB  $CF, $CF, $80, $80, $5E, $1A, $DE, $E9
-mark_3CD0: DEFB  $E9, $E0, $E0, $E0, $E0, $A6, $A6, $AE
-mark_3CD8: DEFB  $B7, $80, $80, $AE, $A9, $2E, $B7, $29
-mark_3CE0: DEFB  $B7, $CD, $28, $B5, $E2, $D3, $34, $B9
-mark_3CE8: DEFB  $33, $34, $B5, $CB, $29, $2F, $33, $BF
-mark_3CF0: DEFB  $D1, $D1, $D1, $D1, $D1, $2D, $26, $31
-mark_3CF8: DEFB  $B9, $45, $2B, $A7, $10, $1D, $A9, $27
-;          
-; data and data pointers for disassembler    
-;          
-mark_3D00: DEFB  $9F, $A6, $C9, $B3, $AE, $BB, $9D, $B6
-mark_3D08: DEFB  $C6, $2D, $B1, $2E, $BD, $2E, $BE, $10
-mark_3D10: DEFB  $41, $91, $10, $41, $15, $2A, $27, $91
-mark_3D18: DEFB  $CD, $D3, $D9, $DF, $3C, $E8, $EB, $EE
-mark_3D20: DEFB  $F3, $F3, $F3, $F5, $91, $81, $89, $6D
-mark_3D28: DEFB  $6A, $F9, $7B, $3A, $70, $9C, $A1, $76
-mark_3D30: DEFB  $A4, $AA, $AD, $FC, $B3, $96, $B8, $BB
-mark_3D38: DEFB  $C1, $C7, $87, $1B, $81, $A1, $E4, $7F
-mark_3D40: DEFB  $0F, $09, $5C, $27, $A8, $29, $AA, $37
-mark_3D48: DEFB  $B1, $37, $B7, $2A, $BD, $31, $A9, $26
-mark_3D50: DEFB  $9A, $2F, $B7, $34, $3A, $B9, $28, $A6
-mark_3D58: DEFB  $26, $A9, $1A, $C1, $38, $B5, $26, $AB
-mark_3D60: DEFB  $1A, $E9, $2E, $B3, $E9, $EF, $F4, $FA
-mark_3D68: DEFB  $8F, $C7, $FA, $17, $00, $E0, $17, $13
-mark_3D70: DEFB  $7A, $45, $00, $8A, $C5, $00, $F5, $59
-mark_3D78: DEFB  $3E, $13, $77, $7A, $45, $00, $92, $C5
-mark_3D80: DEFB  $9E, $58, $45, $13, $15, $AA, $C5, $6A
-mark_3D88: DEFB  $13, $72, $45, $0B, $07, $B2, $C5, $07
-mark_3D90: DEFB  $0B, $7F, $E8, $82, $87, $CB, $62, $5C
-mark_3D98: DEFB  $2F, $90, $B8, $6B, $7F, $46, $7E, $81
-mark_3DA0: DEFB  $00, $FA, $3E, $86, $7A, $43, $86, $92
-mark_3DA8: DEFB  $C5, $6A, $FF, $5F, $6A, $7A, $3B, $86
-mark_3DB0: DEFB  $92, $C5, $6A, $7F, $46, $7E, $82, $9E
-mark_3DB8: DEFB  $CF, $92, $00, $7A, $A1, $2F, $8A, $C5
-mark_3DC0: DEFB  $00, $7A, $A4, $2F, $8A, $C5, $00, $7A
-mark_3DC8: DEFB  $A7, $2F, $8A, $C5, $00, $7A, $63, $00
-mark_3DD0: DEFB  $92, $C5, $AA, $52, $62, $AA, $BA, $C5
-mark_3DD8: DEFB  $00, $50, $B2, $15, $A2, $C5, $13, $6A
-mark_3DE0: DEFB  $45, $11, $13, $9A, $C5, $13, $11, $00
-mark_3DE8: DEFB  $BA, $3E, $B0, $FA, $B6, $B8, $7F, $BC
-mark_3DF0: DEFB  $C4, $87, $D5, $B9, $E1, $D7, $BC, $E2
-mark_3DF8: DEFB  $D7, $FA, $19, $00, $D8, $37, $13, $6A
-;
-; print data for menu & routines
-;
-mark_3E00:	DEFB	 $00, $00, $00, $00, $32, $2A, $33, $BA
-mark_3E08:	DEFB	 $00, $00, $00, $00, $14, $14, $14, $94
-mark_3E10:	DEFB	 $1C, $00, $35, $37, $2E, $33, $39, $00
-mark_3E18:	DEFB	 $28, $34, $29, $AA, $1D, $00, $2D, $2A
-mark_3E20:	DEFB	 $3D, $00, $29, $3A, $32, $B5, $1E, $00
-mark_3E28:	DEFB	 $3C, $37, $2E, $39, $AA, $1F, $00, $2E
-mark_3E30:	DEFB	 $33, $38, $2A, $37, $B9, $20, $00, $29
-mark_3E38:	DEFB	 $2A, $31, $2A, $39, $AA, $21, $00, $39
-mark_3E40:	DEFB	 $37, $26, $33, $38, $2B, $2A, $B7, $22
-mark_3E48:	DEFB	 $00, $38, $2A, $26, $37, $28, $AD, $23
-mark_3E50:	DEFB	 $00, $37, $2A, $35, $31, $26, $28, $AA
-mark_3E58:	DEFB	 $24, $00, $26, $38, $38, $2A, $32, $27
-mark_3E60:	DEFB	 $31, $2A, $B7, $25, $00, $37, $3A, $33
-mark_3E68:	DEFB	 $00, $28, $34, $29, $AA, $26, $00, $28
-mark_3E70:	DEFB	 $26, $31, $28, $3A, $31, $26, $39, $34
-mark_3E78:	DEFB	 $B7, $27, $00, $28, $2D, $37, $0D, $00
-mark_3E80:	DEFB	 $29, $3A, $32, $B5, $28, $00, $26, $38
-mark_3E88:	DEFB	 $28, $2E, $2E, $00, $29, $3A, $32, $B5
-mark_3E90:	DEFB	 $29, $00, $37, $2A, $33, $3A, $32, $27
-mark_3E98:	DEFB	 $2A, $B7, $2A, $00, $2E, $32, $26, $2C
-mark_3EA0:	DEFB	 $2A, $B7, $2B, $00, $32, $2A, $33, $3A
-mark_3EA8:	DEFB	 $00, $9E, $80, $80, $00, $00, $00, $00
-mark_3EB0:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_3EB8:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_3EC0:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_3EC8:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_3ED0:	DEFB	 $31, $2E, $32, $2E, $B9, $37, $34, $3A
-mark_3ED8:	DEFB	 $39, $2E, $33, $2A, $80, $38, $39, $26
-mark_3EE0:	DEFB	 $37, $39, $80, $26, $29, $29, $37, $2A
-mark_3EE8:	DEFB	 $38, $38, $80, $2B, $2E, $33, $2E, $38
-mark_3EF0:	DEFB	 $2D, $80, $1D, $00, $2B, $34, $37, $80
-mark_3EF8:	DEFB	 $35, $37, $2E, $33, $39, $2A, $37, $80
-
-; addresses of routines
-mark_3F00:	DEFB	 $23, $78	;, $.dw, $7823
-mark_3F02:	DEFB	 $20, $79	; , $.dw, $7902
-mark_3F04:	DEFB	 $53, $79	;, $.dw, $7953
-mark_3F06:	DEFB	 $FF, $FF
-mark_3F08:	DEFB	 $FF, $FF
-mark_3F0A:	DEFB	 $FF, $FF
-mark_3F0C:	DEFB	 $FF, $FF
-mark_3F0E:	DEFB	 $FF, $FF
-mark_3F10:	DEFB	 $FF, $FF
-mark_3F12:	DEFB	 $13, $38	;, $.dw, $3813
-mark_3F14:	DEFB	 $FF, $FF
-mark_3F16:	DEFB	 $FF, $FF
-mark_3F18:	DEFB	 $FF, $FF
-mark_3F1A:	DEFB	 $FF, $FF
-mark_3F1C:	DEFB	 $FF, $FF
-mark_3F1E:	DEFB	 $FF, $FF
-
-; Read_Keyboard
-mark_3F20:	DEFB	 $D5, $C5, $E5, $2A, $25, $40, $E5, $ED
-mark_3F28:	DEFB	 $4B, $25, $40, $E1, $C5, $A7, $ED, $42
-mark_3F30:	DEFB	 $28, $F5, $79, $3C, $28, $F1, $E1, $CD
-mark_3F38:	DEFB	 $BD, $07, $7E, $E1, $C1, $D1, $FE, $76
-mark_3F40:	DEFB	 $C8, $FE, $77, $C8, $FE, $00, $20, $05
-mark_3F48:	DEFB	 $CD, $2A, $0A, $CF, $0C, $FE, $1C, $38
-mark_3F50:	DEFB	 $CF, $FE, $2C, $30, $CB, $C9
-;
-; Menu
-;
-mark_3F56:	DEFB	 $21, $21
-mark_3F58:	DEFB	 $40, $CB, $7E, $28, $04, $2A, $7B, $40
-mark_3F60:	DEFB	 $E9, $21, $00, $7E, $06, $14, $3E, $03
-mark_3F68:	DEFB	 $32, $21, $40, $11, $E1, $18, $CD, $9F
-mark_3F70:	DEFB	 $7B, $CD, $53, $7B, $10, $F8, $01, $99
-mark_3F78:	DEFB	 $7B, $CD, $3B, $7B, $2B, $7E, $D6, $1C
-mark_3F80:	DEFB	 $47, $07, $6F, $26, $7F, $7E, $23, $66
-mark_3F88:	DEFB	 $6F, $E5, $C5, $CD, $2A, $0A, $C1, $3E
-mark_3F90:	DEFB	 $E0, $32, $3E, $7D, $78, $21, $10, $7E
-mark_3F98:	DEFB	 $CD, $A5, $7B, $16, $1A, $CD, $53, $7B
-mark_3FA0:	DEFB	 $3E, $76, $D7, $D7, $C9
-;
-; InputString, the heart of all routines
-;
-mark_3FA5:	DEFB	 $3E, $01, $32
-mark_3FA8:	DEFB	 $21, $40, $21, $E0, $7F, $36, $17, $CD
-mark_3FB0:	DEFB	 $C0, $7F, $CD, $20, $7F, $FE, $76, $20
-mark_3FB8:	DEFB	 $10, $3E, $E0, $BD, $28, $F4, $36, $00
-mark_3FC0:	DEFB	 $23, $22, $3E, $7D, $CD, $53, $7B, $2B
-mark_3FC8:	DEFB	 $C9
-mark_3FC9:	DEFB	 $FE, $77, $20, $0B, $3E, $E0, $BD
-mark_3FD0:	DEFB	 $28, $DB, $CD, $BE, $7F, $2B, $18, $D5
-mark_3FD8:	DEFB	 $77, $7B, $BD, $28, $D0, $23, $18, $CD
-;
-; mnemonic string, ram area for mnemonic to be built up
-;
-mark_3FE0:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-mark_3FE8:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-;
-; spare bytes
-;
-mark_3FF0:	DEFB	 $00, $00, $00, $00, $00, $00, $00, $00
-;
-; next address for routine
-;
-mark_3FF8:	DEFB	 $00, $00
-;
-; finish address for routine
-;
-mark_3FFA:	DEFB	 $00, $00
-;
-; spare bytes
-;
-mark_3FFC:	DEFB	 $00, $00, $00
-mark_3FFF:	DEFB	 $C9	;	ret
-
-
-#else
-;
-;
-;
-Input_Prompt_Data	equ	$7B93
-Get_A_addresses		equ	$7902
-Next_Address		equ	$7FFB
-#endif
-
-
-
-
-
-
-
-
-#end					; required by zasm
-
-
 
+#end