Add full compiler toolchain, libc, examples and reference docs
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Executable
+921
@@ -0,0 +1,921 @@
|
||||
|
||||
;[BEGIN]
|
||||
;//MODULE: INTMOUSE
|
||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||
;//UPDATE: 24-10-1999 DNS Restore module
|
||||
|
||||
CMOUSE EQU #1B
|
||||
DMOUSE EQU #1A
|
||||
Y_PORT EQU #89
|
||||
VPAGE EQU #C9
|
||||
|
||||
; MOUSE SOFTWARE SPECIFICATION
|
||||
;---------------------------------------------
|
||||
; COMMAND 00h (INITIALIZATION)
|
||||
;
|
||||
; RETURN: NC - MOUSE PRESENT
|
||||
; C - MOUSE ABSENT
|
||||
;---------------------------------------------
|
||||
; COMMAND 01h (SHOW MOUSE CURSOR)
|
||||
;
|
||||
; RETURN: NC - DONE
|
||||
; C - MOUSE ON SCREEN
|
||||
;---------------------------------------------
|
||||
; COMMAND 02h (HIDE MOUSE CURSOR)
|
||||
;
|
||||
; RETURN: NC - DONE
|
||||
; C - NONE MOUSE
|
||||
;---------------------------------------------
|
||||
; COMMAND 03h (READ MOUSE STATE)
|
||||
;
|
||||
; RETURN: HL - X COORD
|
||||
; DE - Y COORD
|
||||
; A - BUTTONS D2-D0 (MIDDLE,RIGHT,LEFT)
|
||||
;---------------------------------------------
|
||||
; COMMAND 04h (GOTO MOUSE CURSOR)
|
||||
;
|
||||
; INPUT: HL - X COORD
|
||||
; DE - Y COORD
|
||||
;---------------------------------------------
|
||||
; COMMAND 05h (RESERVED)
|
||||
;---------------------------------------------
|
||||
; COMMAND 06h (RESERVED)
|
||||
;---------------------------------------------
|
||||
; COMMAND 07h (SET VERT. BOUNDS)
|
||||
;
|
||||
; INPUT: HL - Y MIN
|
||||
; DE - Y MAX
|
||||
;---------------------------------------------
|
||||
; COMMAND 08h (SET HORZ. BOUNDS)
|
||||
;
|
||||
; INPUT: HL - X MIN
|
||||
; DE - X MAX
|
||||
;---------------------------------------------
|
||||
; COMMAND 09h (LOAD CURSOR)
|
||||
;
|
||||
; INPUT: IX - CURSOR IMAGE
|
||||
; H - HEIGHT CURSOR
|
||||
; L - WIDTH CURSOR
|
||||
; D - Y HOT SPOT
|
||||
; E - X HOT SPOT
|
||||
; B = 0
|
||||
;---------------------------------------------
|
||||
; COMMAND 0Ah (SET CURSOR IN TEXT MODES)
|
||||
;
|
||||
; INPUT: H - AND SIMBOL MASK
|
||||
; L - XOR SIMBOL MASK
|
||||
; D - AND ATTRIBUT MASK
|
||||
; E - XOR ATTRIBUT MASK
|
||||
; B = 0
|
||||
;---------------------------------------------
|
||||
; COMMAND 0Bh (RETURN CURSOR)
|
||||
;
|
||||
; INPUT: IX - CURSOR IMAGE BUFFER
|
||||
; OUTPUT: H - HEIGHT CURSOR
|
||||
; L - WIDTH CURSOR
|
||||
; D - Y HOT SPOT
|
||||
; E - X HOT SPOT
|
||||
;---------------------------------------------
|
||||
; COMMAND 0Ch (RESERVED)
|
||||
;---------------------------------------------
|
||||
; COMMAND 0Dh (RESERVED)
|
||||
;---------------------------------------------
|
||||
; COMMAND 0Eh (GET SENSETIVE)
|
||||
; OUTPUT: H - VERTICAL SENSETIVE
|
||||
; L - HORIZONTAL SENSETIVE
|
||||
;---------------------------------------------
|
||||
; COMMAND 0Fh (SET SENSETIVE)
|
||||
; INPUT: H - VERTICAL SENSETIVE
|
||||
; L - HORIZONTAL SENSETIVE
|
||||
;---------------------------------------------
|
||||
; COMMAND 80h (MOUSE HARDWARE INTERRUPT)
|
||||
;---------------------------------------------
|
||||
; COMMAND 81h (CHANGE VIDEO MODE)
|
||||
; INPUT: A - MODE
|
||||
;---------------------------------------------
|
||||
; COMMAND 82h (RESERVED)
|
||||
;---------------------------------------------
|
||||
; COMMAND 83h (MOUSE REFRESH)
|
||||
;---------------------------------------------
|
||||
; ERRORS: 0 - NO ERROR
|
||||
; 1 - COMMAND NOT PRESENT
|
||||
; 2 - DEVICE ABSENT
|
||||
; 3 - CURSOR ON (UZHE)
|
||||
; 4 - CURSOR OFF (UZHE)
|
||||
; 5 - CURSOR IMAGE VERY BIG
|
||||
|
||||
INTMOUS BIT 7,C
|
||||
JP NZ,EMOUSE
|
||||
INC C
|
||||
DEC C
|
||||
JP Z,MS_INIT
|
||||
DEC C
|
||||
JP Z,MS_SHOW
|
||||
DEC C
|
||||
JP Z,MS_HIDD
|
||||
DEC C
|
||||
JP Z,MS_READ
|
||||
DEC C
|
||||
JP Z,MS_GOTO
|
||||
DEC C
|
||||
JP Z,MS_RESR
|
||||
DEC C
|
||||
JP Z,MS_RESR
|
||||
DEC C
|
||||
JP Z,MS_VERT
|
||||
DEC C
|
||||
JP Z,MS_HORZ
|
||||
DEC C
|
||||
JP Z,MS_CURS
|
||||
DEC C
|
||||
JP Z,MS_MASK
|
||||
DEC C
|
||||
JP Z,MS_BCUR
|
||||
DEC C
|
||||
JP Z,MS_RESR
|
||||
DEC C
|
||||
JP Z,MS_RESR
|
||||
DEC C
|
||||
JP Z,MS_GSEN
|
||||
DEC C
|
||||
JP Z,MS_SENT
|
||||
MS_RESR LD A,1
|
||||
SCF
|
||||
RET
|
||||
|
||||
EMOUSE RES 7,C
|
||||
INC C
|
||||
DEC C
|
||||
JP Z,M_INT
|
||||
DEC C
|
||||
JP Z,M_MODE
|
||||
DEC C
|
||||
JR Z,M_RESR
|
||||
DEC C
|
||||
JP Z,M_REFR
|
||||
M_RESR LD A,1
|
||||
SCF
|
||||
RET
|
||||
|
||||
MS_INIT DI
|
||||
LD A,85
|
||||
OUT (#10),A
|
||||
LD A,45
|
||||
OUT (#10),A
|
||||
LD A,0
|
||||
OUT (CMOUSE),A
|
||||
LD A,1
|
||||
OUT (CMOUSE),A
|
||||
LD A,0
|
||||
OUT (CMOUSE),A
|
||||
LD A,3
|
||||
OUT (CMOUSE),A
|
||||
LD A,#41
|
||||
OUT (CMOUSE),A
|
||||
LD A,4
|
||||
OUT (CMOUSE),A
|
||||
LD A,#47
|
||||
OUT (CMOUSE),A
|
||||
LD A,5
|
||||
OUT (CMOUSE),A
|
||||
LD A,#E0
|
||||
OUT (CMOUSE),A
|
||||
EI
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_SHOW PUSH IX
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
EX AF,AF'
|
||||
PUSH AF
|
||||
LD HL,(PIX_X)
|
||||
LD DE,(PIX_Y)
|
||||
DI
|
||||
CALL MOUSE
|
||||
XOR A
|
||||
LD (REFRESH+1),A
|
||||
EI
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
POP DE
|
||||
POP HL
|
||||
POP IX
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_HIDD PUSH IX
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
EX AF,AF'
|
||||
PUSH AF
|
||||
DI
|
||||
LD A,1
|
||||
LD (REFRESH+1),A
|
||||
CALL RESTORE
|
||||
EI
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
POP DE
|
||||
POP HL
|
||||
POP IX
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_READ LD HL,(PIX_X)
|
||||
LD DE,(PIX_Y)
|
||||
LD A,(MB)
|
||||
AND A
|
||||
RET
|
||||
|
||||
MS_GOTO PUSH IX
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
LD (PIX_X),HL
|
||||
LD (PIX_Y),DE
|
||||
EX AF,AF'
|
||||
PUSH AF
|
||||
DI
|
||||
CALL REFRESH
|
||||
EI
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
POP DE
|
||||
POP HL
|
||||
POP IX
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_CURS PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
LD A,L
|
||||
LD (M_XSIZE),A
|
||||
LD A,H
|
||||
LD (M_YSIZE),A
|
||||
LD C,E
|
||||
LD B,0
|
||||
LD (XHOT_SP),BC
|
||||
LD C,D
|
||||
LD B,0
|
||||
LD (YHOT_SP),BC
|
||||
EXX
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
LD HL,0
|
||||
MSCURS1 ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,MSCURS1
|
||||
PUSH HL
|
||||
LD BC,MAXSIZM+1
|
||||
AND A
|
||||
SBC HL,BC
|
||||
CCF
|
||||
EXX
|
||||
POP BC
|
||||
POP HL
|
||||
LD A,5
|
||||
JR C,NOLOADM
|
||||
LD DE,M_IMAGE
|
||||
DI
|
||||
LDIR
|
||||
XOR A
|
||||
NOLOADM POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
EI
|
||||
RET
|
||||
|
||||
MS_BCUR PUSH IX
|
||||
EXX
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
LD HL,0
|
||||
MSBCUR1 ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,MSBCUR1
|
||||
PUSH HL
|
||||
LD BC,MAXSIZM+1
|
||||
AND A
|
||||
SBC HL,BC
|
||||
CCF
|
||||
EXX
|
||||
POP BC
|
||||
POP HL
|
||||
LD A,5
|
||||
JR C,NOSAVEM
|
||||
LD DE,M_IMAGE
|
||||
EX DE,HL
|
||||
DI
|
||||
LDIR
|
||||
LD A,(M_XSIZE)
|
||||
LD L,A
|
||||
LD A,(M_YSIZE)
|
||||
LD H,A
|
||||
LD BC,(XHOT_SP)
|
||||
LD E,C
|
||||
LD BC,(YHOT_SP)
|
||||
LD D,C
|
||||
LD BC,0
|
||||
XOR A
|
||||
NOSAVEM EI
|
||||
RET
|
||||
|
||||
MS_HORZ
|
||||
LD (MIN_X),HL
|
||||
LD (MAX_X),DE
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_VERT
|
||||
LD (MIN_Y),HL
|
||||
LD (MAX_Y),DE
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_MASK
|
||||
LD (ANDXORS),HL
|
||||
LD (ANDXORA),DE
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; H - VERTICAL SENSETIVE
|
||||
; L - HORIZONTAL SENSETIVE
|
||||
|
||||
MS_SENT
|
||||
LD (SENSEXY),HL
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MS_GSEN
|
||||
LD HL,(SENSEXY)
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MOUSET LD (REST_XT+1),HL
|
||||
LD (REST_YT+1),DE
|
||||
;Y
|
||||
SRL D
|
||||
RR E
|
||||
SRL D
|
||||
RR E
|
||||
SRL D
|
||||
RR E
|
||||
LD D,E
|
||||
;X
|
||||
SRL H
|
||||
RR L
|
||||
SRL H
|
||||
RR L
|
||||
SRL H
|
||||
RR L
|
||||
LD E,L
|
||||
|
||||
IN A,(Y_PORT)
|
||||
LD XH,A
|
||||
IN A,(PAGE1)
|
||||
LD XL,A
|
||||
;
|
||||
DI
|
||||
;
|
||||
LD A,#54
|
||||
OUT (PAGE1),A
|
||||
;
|
||||
LD A,D
|
||||
ADD A,A
|
||||
ADD A,A ;Y * 4
|
||||
LD L,A
|
||||
LD H,#43 ;+ #4300
|
||||
;
|
||||
IN A,(VPAGE)
|
||||
RRCA
|
||||
AND #80
|
||||
OR #01
|
||||
ADD A,E
|
||||
OUT (Y_PORT),A
|
||||
INC L
|
||||
LD A,(HL) ;SIMBOL
|
||||
LD BC,(ANDXORS)
|
||||
AND B
|
||||
XOR C
|
||||
LD (HL),A
|
||||
INC L
|
||||
LD A,(HL) ;ATTRIBUT
|
||||
LD BC,(ANDXORA)
|
||||
AND B
|
||||
XOR C
|
||||
LD (HL),A
|
||||
;
|
||||
LD A,XL
|
||||
OUT (PAGE1),A
|
||||
LD A,XH
|
||||
OUT (Y_PORT),A
|
||||
RET
|
||||
|
||||
RESTORT
|
||||
REST_XT LD HL,#0000
|
||||
REST_YT LD DE,#0000
|
||||
;Y
|
||||
SRL D
|
||||
RR E
|
||||
SRL D
|
||||
RR E
|
||||
SRL D
|
||||
RR E
|
||||
LD D,E
|
||||
;X
|
||||
SRL H
|
||||
RR L
|
||||
SRL H
|
||||
RR L
|
||||
SRL H
|
||||
RR L
|
||||
LD E,L
|
||||
|
||||
IN A,(Y_PORT)
|
||||
LD XH,A
|
||||
IN A,(PAGE1)
|
||||
LD XL,A
|
||||
;
|
||||
DI
|
||||
;
|
||||
LD A,#50
|
||||
OUT (PAGE1),A
|
||||
;
|
||||
LD A,D
|
||||
ADD A,A
|
||||
ADD A,A ;Y * 4
|
||||
LD L,A
|
||||
LD H,#43 ;+ #4300
|
||||
;
|
||||
IN A,(VPAGE)
|
||||
RRCA
|
||||
AND #80
|
||||
OR #01
|
||||
ADD A,E
|
||||
OUT (Y_PORT),A
|
||||
INC L
|
||||
LD A,(HL) ;SIMBOL
|
||||
LD (HL),A
|
||||
INC L
|
||||
LD A,(HL) ;ATTRIBUT
|
||||
LD (HL),A
|
||||
;
|
||||
LD A,XL
|
||||
OUT (PAGE1),A
|
||||
LD A,XH
|
||||
OUT (Y_PORT),A
|
||||
RET
|
||||
|
||||
RESTORE LD A,#00
|
||||
BIT 7,A
|
||||
JP Z,RESTORT
|
||||
RESTORG IN A,(PAGE3)
|
||||
LD B,A
|
||||
IN A,(Y_PORT)
|
||||
LD C,A
|
||||
PUSH BC
|
||||
LD A,#50
|
||||
OUT (PAGE3),A
|
||||
REST_X LD HL,0
|
||||
REST_Y LD DE,0
|
||||
LD A,E
|
||||
EX AF,AF'
|
||||
REST_V LD A,#00
|
||||
AND 1
|
||||
LD DE,#C000 ;PAGE 0
|
||||
JR Z,AA2
|
||||
LD DE,#C000+320 ;PAGE 1
|
||||
AA2 ADD HL,DE
|
||||
REST_A LD A,0
|
||||
LD XH,A
|
||||
EX AF,AF'
|
||||
REST_H
|
||||
RS002 LD BC,10
|
||||
OUT (Y_PORT),A
|
||||
EX AF,AF'
|
||||
; PUSH HL
|
||||
LD (PUSH_HL+1),HL
|
||||
LD D,H
|
||||
LD E,L
|
||||
LDIR
|
||||
PUSH_HL LD HL,#0000
|
||||
; POP HL
|
||||
EX AF,AF'
|
||||
INC A
|
||||
JR Z,RS003
|
||||
DEC XH
|
||||
JR NZ,RS002
|
||||
RS003 POP BC
|
||||
LD A,B
|
||||
OUT (PAGE3),A
|
||||
LD A,C
|
||||
OUT (Y_PORT),A
|
||||
XOR A
|
||||
RET
|
||||
|
||||
;HL/DE - X/Y
|
||||
|
||||
MOUSE LD A,(MODE)
|
||||
LD (RESTORE+1),A
|
||||
BIT 7,A
|
||||
JP Z,MOUSET
|
||||
MOUSEG CP #82 ;640x256x16
|
||||
JR NZ,NOFX
|
||||
SRL H
|
||||
RR L
|
||||
NOFX LD IX,M_IMAGE
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD (REALXS),BC
|
||||
LD (REST_H+1),BC
|
||||
LD C,B
|
||||
LD (SKIPXF),BC
|
||||
LD A,(M_YSIZE)
|
||||
LD (REST_A+1),A
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD (REALYS),BC
|
||||
LD BC,(YHOT_SP)
|
||||
LD A,E
|
||||
SUB C
|
||||
LD E,A
|
||||
JR NC,GOODY
|
||||
NEG
|
||||
LD E,A
|
||||
LD A,(M_XSIZE)
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD A,(M_YSIZE)
|
||||
SUB E
|
||||
SKIPMY ADD IX,BC
|
||||
DEC E
|
||||
JR NZ,SKIPMY
|
||||
LD C,A
|
||||
LD (REALYS),BC
|
||||
GOODY LD BC,(XHOT_SP)
|
||||
AND A
|
||||
SBC HL,BC
|
||||
JR NC,GOODX
|
||||
LD B,H
|
||||
LD C,L
|
||||
LD HL,0
|
||||
AND A
|
||||
SBC HL,BC
|
||||
LD (SKIPXF),HL
|
||||
LD A,(M_XSIZE)
|
||||
SUB L
|
||||
LD L,A
|
||||
LD (REALXS),HL
|
||||
LD HL,0
|
||||
GOODX LD (REST_X+1),HL
|
||||
LD (REST_Y+1),DE
|
||||
|
||||
PUSH HL
|
||||
IN A,(PAGE3)
|
||||
LD H,A
|
||||
IN A,(Y_PORT)
|
||||
LD L,A
|
||||
EX (SP),HL
|
||||
LD A,#5C
|
||||
OUT (PAGE3),A
|
||||
LD A,E
|
||||
EX AF,AF'
|
||||
IN A,(VPAGE)
|
||||
LD (REST_V+1),A
|
||||
AND 1
|
||||
LD DE,#C000 ;PAGE 0
|
||||
JR Z,AA1
|
||||
LD DE,#C000+320 ;PAGE 1
|
||||
AA1 ADD HL,DE
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
EX DE,HL ;HL - BITMAP
|
||||
LD BC,(REALYS)
|
||||
LD XH,C
|
||||
EX AF,AF'
|
||||
MS002 LD BC,(SKIPXF)
|
||||
ADD HL,BC
|
||||
LD BC,(REALXS)
|
||||
OUT (Y_PORT),A
|
||||
EX AF,AF'
|
||||
;USH DE
|
||||
LD (PUSH_DE+1),DE
|
||||
LDIR
|
||||
PUSH_DE LD DE,#0000
|
||||
; POP DE
|
||||
EX AF,AF'
|
||||
INC A
|
||||
JR Z,MS003
|
||||
DEC XH
|
||||
JR NZ,MS002
|
||||
MS003 POP BC
|
||||
LD A,B
|
||||
OUT (PAGE3),A
|
||||
LD A,C
|
||||
OUT (Y_PORT),A
|
||||
XOR A
|
||||
RET
|
||||
|
||||
READ_M IN A,(CMOUSE)
|
||||
RRCA
|
||||
RET NC
|
||||
IN A,(DMOUSE)
|
||||
LD L,A
|
||||
BIT 6,A
|
||||
CCF
|
||||
RET Z
|
||||
TST_01 IN A,(CMOUSE)
|
||||
RRCA
|
||||
JP NC,TST_01
|
||||
IN A,(DMOUSE)
|
||||
LD E,A
|
||||
BIT 6,A
|
||||
CCF
|
||||
RET NZ
|
||||
TST_02 IN A,(CMOUSE)
|
||||
RRCA
|
||||
JR NC,TST_02
|
||||
IN A,(DMOUSE)
|
||||
LD D,A
|
||||
BIT 6,A
|
||||
CCF
|
||||
RET NZ
|
||||
LD A,E
|
||||
AND #3F
|
||||
LD E,A
|
||||
LD A,L
|
||||
AND #03
|
||||
RRCA
|
||||
RRCA
|
||||
OR E
|
||||
LD E,A
|
||||
LD A,D
|
||||
AND #3F
|
||||
LD D,A
|
||||
LD A,L
|
||||
AND #0C
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
OR D
|
||||
LD D,A
|
||||
LD A,L
|
||||
RLCA
|
||||
RLCA
|
||||
RLCA
|
||||
RES 6,A
|
||||
JR NC,STBU
|
||||
SET 6,A
|
||||
STBU RLCA
|
||||
RLCA
|
||||
AND #03
|
||||
LD (MB),A
|
||||
CALL SENSE
|
||||
LD A,E
|
||||
LD (MX),A
|
||||
LD A,D
|
||||
LD (MY),A
|
||||
SCF
|
||||
RET
|
||||
|
||||
MCORECT LD HL,(PIX_X)
|
||||
LD DE,(MX)
|
||||
LD D,0
|
||||
BIT 7,E
|
||||
JR NZ,DECX
|
||||
ADD HL,DE
|
||||
LD (PIX_X),HL
|
||||
EX DE,HL
|
||||
LD HL,(MAX_X)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JP NC,YCOO
|
||||
LD HL,(MAX_X)
|
||||
LD (PIX_X),HL
|
||||
JP YCOO
|
||||
DECX LD A,E
|
||||
NEG
|
||||
LD E,A
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD (PIX_X),HL
|
||||
JR C,YCOO2
|
||||
LD DE,(MIN_X)
|
||||
SBC HL,DE
|
||||
JR NC,YCOO
|
||||
YCOO2 LD HL,(MIN_X)
|
||||
LD (PIX_X),HL
|
||||
|
||||
YCOO LD HL,(PIX_Y)
|
||||
LD DE,(MY)
|
||||
LD D,0
|
||||
BIT 7,E
|
||||
JR NZ,DECY
|
||||
ADD HL,DE
|
||||
LD (PIX_Y),HL
|
||||
EX DE,HL
|
||||
|
||||
LD HL,(MAX_Y)
|
||||
AND A
|
||||
SBC HL,DE
|
||||
RET NC
|
||||
LD HL,(MAX_Y)
|
||||
LD (PIX_Y),HL
|
||||
RET
|
||||
|
||||
DECY LD A,E
|
||||
NEG
|
||||
LD E,A
|
||||
AND A
|
||||
SBC HL,DE
|
||||
LD (PIX_Y),HL
|
||||
JR C,XCOO
|
||||
LD DE,(MIN_Y)
|
||||
SBC HL,DE
|
||||
RET NC
|
||||
XCOO LD HL,(MIN_Y)
|
||||
LD (PIX_Y),HL
|
||||
RET
|
||||
|
||||
SENSE LD HL,(SENSEXY)
|
||||
LD A,L
|
||||
OR L
|
||||
RET Z
|
||||
DEC A
|
||||
RET Z
|
||||
LD A,E
|
||||
BIT 7,A
|
||||
LD B,#FF
|
||||
JR Z,SEN1
|
||||
LD B,#7F
|
||||
NEG
|
||||
SEN1 INC B
|
||||
SUB L
|
||||
JR NC,SEN1
|
||||
BIT 7,B
|
||||
JR Z,SEN2
|
||||
LD A,B
|
||||
RES 7,A
|
||||
NEG
|
||||
LD B,A
|
||||
SEN2 LD E,B
|
||||
LD A,D
|
||||
BIT 7,A
|
||||
LD B,#FF
|
||||
JR Z,SEN3
|
||||
LD B,#7F
|
||||
NEG
|
||||
SEN3 INC B
|
||||
SUB H
|
||||
JR NC,SEN3
|
||||
BIT 7,B
|
||||
JR Z,SEN4
|
||||
LD A,B
|
||||
RES 7,A
|
||||
NEG
|
||||
LD B,A
|
||||
SEN4 LD D,B
|
||||
RET
|
||||
|
||||
M_MODE LD (MODE),A
|
||||
OR A
|
||||
JR Z,UNKMODE
|
||||
CP 1
|
||||
JR Z,UNKMODE
|
||||
CP 2
|
||||
JR Z,S320256
|
||||
CP 3
|
||||
JR Z,S640256
|
||||
BIT 7,A
|
||||
JR Z,UNKMODE
|
||||
RES 7,A
|
||||
CP 1
|
||||
JR Z,S320256
|
||||
CP 2
|
||||
JR Z,S640256
|
||||
UNKMODE XOR A
|
||||
SCF
|
||||
RET
|
||||
|
||||
S320256
|
||||
LD HL,0 ;MIN X
|
||||
LD DE,319 ;MAX X
|
||||
CALL MS_HORZ
|
||||
LD HL,0 ;MIN X
|
||||
LD DE,255 ;MAX X
|
||||
CALL MS_VERT
|
||||
XOR A
|
||||
RET
|
||||
|
||||
S640256
|
||||
LD HL,0 ;MIN X
|
||||
LD DE,639 ;MAX X
|
||||
CALL MS_HORZ
|
||||
LD HL,0 ;MIN X
|
||||
LD DE,255 ;MAX X
|
||||
CALL MS_VERT
|
||||
XOR A
|
||||
RET
|
||||
|
||||
;Mouse Interrupt
|
||||
M_INT IN A,(PAGE3)
|
||||
LD B,A
|
||||
IN A,(Y_PORT)
|
||||
LD C,A
|
||||
PUSH BC
|
||||
CALL REFRESH ;Refresh mouse
|
||||
CALL CONTROL
|
||||
POP BC
|
||||
LD A,B
|
||||
OUT (PAGE3),A
|
||||
LD A,C
|
||||
OUT (Y_PORT),A
|
||||
RET
|
||||
|
||||
M_REFR CALL CONTROL
|
||||
AND A
|
||||
RET
|
||||
|
||||
CONTROL CALL READ_M
|
||||
RET NC
|
||||
CALL MCORECT
|
||||
LD A,#00
|
||||
LD (REDY+1),A
|
||||
RET
|
||||
|
||||
REFRESH LD A,#01
|
||||
OR A
|
||||
RET NZ
|
||||
REDY LD A,#00
|
||||
; OR A
|
||||
; RET NZ
|
||||
CALL RESTORE
|
||||
LD HL,(PIX_X)
|
||||
LD DE,(PIX_Y)
|
||||
CALL MOUSE
|
||||
LD A,#FF
|
||||
LD (REDY+1),A
|
||||
RET
|
||||
|
||||
MODE DB #03
|
||||
|
||||
PIX_X DW 160
|
||||
PIX_Y DW 128
|
||||
|
||||
MX DB #00
|
||||
MY DB #00
|
||||
MB DB #00
|
||||
MB_OLD DB #00
|
||||
MIN_X DW 0
|
||||
MAX_X DW 319
|
||||
MIN_Y DW 0
|
||||
MAX_Y DW 255
|
||||
SENSEXY
|
||||
SENSE_X DB 0
|
||||
SENSE_Y DB 0
|
||||
|
||||
XHOT_SP DW 0
|
||||
YHOT_SP DW 0
|
||||
|
||||
ANDXORS DW #FF00
|
||||
ANDXORA DW #FF77
|
||||
|
||||
M_XSIZE DB 10
|
||||
M_YSIZE DB 14
|
||||
SKIPXF DW 0
|
||||
REALXS DW 0
|
||||
REALYS DW 0
|
||||
|
||||
X EQU #00
|
||||
W EQU #FE
|
||||
N EQU #FF
|
||||
|
||||
M_IMAGE
|
||||
MS_BMP DB X,X,N,N,N,N,N,N,N,N
|
||||
DB X,W,X,N,N,N,N,N,N,N
|
||||
DB X,W,W,X,N,N,N,N,N,N
|
||||
DB X,W,W,W,X,N,N,N,N,N
|
||||
DB X,W,W,W,W,X,N,N,N,N
|
||||
DB X,W,W,W,W,W,X,N,N,N
|
||||
DB X,W,W,W,W,W,W,X,N,N
|
||||
DB X,W,W,W,W,X,X,X,X,N
|
||||
DB X,W,W,X,W,X,N,N,N,N
|
||||
DB X,W,X,X,W,W,X,N,N,N
|
||||
DB X,X,N,N,X,W,X,N,N,N
|
||||
DB X,N,N,N,X,W,W,X,N,N
|
||||
DB N,N,N,N,N,X,X,N,N,N
|
||||
DB N,N,N,N,N,N,N,N,N,N
|
||||
DS 116
|
||||
MAXSIZM EQU $-M_IMAGE
|
||||
|
||||
;//MODULE: INTMOUSE
|
||||
;[END]
|
||||
|
||||
Reference in New Issue
Block a user