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:
@@ -0,0 +1,822 @@
|
||||
|
||||
.Z80
|
||||
ASEG
|
||||
.RADIX 10
|
||||
ORG 100H
|
||||
|
||||
DB 'EX'
|
||||
DB 45H ; RESERV
|
||||
DB 0 ; MY VERSION
|
||||
DW 200H,0 ; START CODE IN FILE
|
||||
DW 0 ; LEN START LOAD DATA
|
||||
DW 0,0,0 ; RESERV
|
||||
DW 8100H ; ADRESS IN MEM
|
||||
DW 8100H ; START ADRESS
|
||||
DW 0BFFEH ; STACK ADRESS
|
||||
DS 490
|
||||
|
||||
.PHASE 8100h
|
||||
|
||||
INCLUDE SPRINT00.ASZ
|
||||
|
||||
START:
|
||||
|
||||
DI
|
||||
|
||||
LD A,CNF_0
|
||||
OUT (SYS_PORT_OFF),A
|
||||
|
||||
LD C,0A6h ; ãáâ ®¢ª ¯ «¨âàë
|
||||
LD A,1
|
||||
LD B,1
|
||||
RST 8h
|
||||
|
||||
LD C,0A6h
|
||||
LD A,0
|
||||
LD B,1
|
||||
RST 8h
|
||||
|
||||
LD C,0A6h
|
||||
LD A,2
|
||||
LD B,1
|
||||
RST 8h
|
||||
|
||||
LD C,0A6h
|
||||
LD A,3
|
||||
LD B,1
|
||||
RST 8h
|
||||
|
||||
LD A,CNF_3
|
||||
OUT (SYS_PORT_OFF),A
|
||||
|
||||
LD A,3 ; ãáâ ®¢ª ¢ãâà.¯®à⮢ Z84C15 ¤«ï ¯¥à¥§ £à㧪¨
|
||||
OUT (0EEh),A
|
||||
LD A,3
|
||||
OUT (0EFh),A ; CASH & ROM
|
||||
|
||||
; LD A,(IX+2) ; ä« £ (NOT USE!)
|
||||
; LD (FLAG),A
|
||||
|
||||
IN A,(PAGE1)
|
||||
LD (PG5+1),A
|
||||
|
||||
CALL READ_FROM_FILE ; ç¨â âì ¯à®è¨¢ªã ¨§ ä ©«
|
||||
; ¯ ¬ïâì §¢¥à᪨ ¥ ¢ë¤¥«¥ !
|
||||
; ç⥨¥ ¯àאַ ¢ áâà ¨æë 1C..1F
|
||||
LD DE,RELOAD_RET
|
||||
CALL SET_RETURN ; ãáâ ®¢ª ¤ ëå ¤«ï ¢®§¢à â
|
||||
|
||||
IN A,(0FBh) ; CASH_on
|
||||
|
||||
CALL SET_ACEX_DATA ; ¯¥à¥£à㧪 ¤ ëå ACEX ¢ FAST-RAM
|
||||
|
||||
IN A,(07Bh) ; CASH_off
|
||||
|
||||
PG5: LD A,5 ; ¢®§¢à â áâà ¨æë 1
|
||||
OUT (PAGE1),A
|
||||
|
||||
;************************************************
|
||||
|
||||
RESET:
|
||||
|
||||
DI
|
||||
|
||||
IN A,(PAGE1) ; ®âªàë⨥ ¯®àâ á¡à®á
|
||||
PUSH AF
|
||||
LD A,40h
|
||||
OUT (PAGE1),A ; set DCP page
|
||||
LD A,2Eh
|
||||
LD (04400h),A ; open for WR
|
||||
LD (04600h),A ; open for RD
|
||||
POP AF
|
||||
OUT (PAGE1),A ; Close PAGE1
|
||||
|
||||
RESET_LOOP: ; 横« á¡à®á
|
||||
LD BC,100h
|
||||
OUT (C),C
|
||||
LD BC,000h
|
||||
OUT (C),C
|
||||
JR RESET_LOOP ; ¯®«®áâìî § 横«¨âì!
|
||||
|
||||
DI ; ¯ë«¥ã«®¢¨â¥«ì
|
||||
HALT
|
||||
|
||||
;*************************************************
|
||||
SET_ACEX_DATA:
|
||||
|
||||
DI
|
||||
LD BC,1FFDh
|
||||
XOR A
|
||||
OUT (C),A ; ®âª«îç¨âì RAM-0
|
||||
|
||||
LD A,4
|
||||
OUT (SYS_PORT_ON),A ; DCP-PAGE 0
|
||||
|
||||
LD A,0
|
||||
OUT (5Ch),A
|
||||
|
||||
LD A,1Ch
|
||||
OUT (PAGE1),A ; áâà ¨æ á ¤ 묨 ä ©«
|
||||
|
||||
LD HL,04100h ; ¯¥à¥ª¨¤ë¢ ¨¥ ¤ ëå ¢ Š�˜
|
||||
LD DE,01000h
|
||||
LD BC,03000h
|
||||
LDIR
|
||||
|
||||
LD A,1
|
||||
OUT (5Ch),A
|
||||
|
||||
LD DE,00000h
|
||||
|
||||
LD BC,0F00h
|
||||
LDIR
|
||||
|
||||
IN A,(PAGE1)
|
||||
INC A
|
||||
OUT (PAGE1),A
|
||||
LD HL,4000h
|
||||
|
||||
LD BC,3100h
|
||||
LDIR
|
||||
|
||||
LD A,2
|
||||
OUT (5Ch),A ; ‘âà ¨æ Š�˜ = 2
|
||||
|
||||
LD DE,00000h
|
||||
|
||||
LD BC,0F00h
|
||||
LDIR
|
||||
|
||||
IN A,(PAGE1)
|
||||
INC A
|
||||
OUT (PAGE1),A
|
||||
LD HL,4000h
|
||||
|
||||
LD BC,3100h
|
||||
LDIR
|
||||
|
||||
LD A,3
|
||||
OUT (05Ch),A ; ‘âà ¨æ Š�˜ = 3
|
||||
|
||||
LD DE,00000h
|
||||
|
||||
LD BC,0F00h
|
||||
LDIR
|
||||
|
||||
IN A,(PAGE1)
|
||||
INC A
|
||||
OUT (PAGE1),A
|
||||
LD HL,4000h
|
||||
|
||||
LD BC,3100h
|
||||
LDIR
|
||||
|
||||
LD HL,STRING ; ä« £ ¯¥à¥§ £à㧪¨ ¨§ Š�˜-
|
||||
LD DE,03EF0h
|
||||
|
||||
LD BC,10h
|
||||
LDIR
|
||||
|
||||
LD A,0FFh
|
||||
LD (03EE0h),A ; no multiple ! ¯¥à¥§ £à㧪 ⮫쪮 ®¤
|
||||
|
||||
LD A,(FLAG) ; ¥á«¨ âãâ M
|
||||
CP "M" ; â® ¯¥à¥£à㦠âìáï ¡ã¤¥â ¤® ¯®â¥à¨ ¯ã«ìá
|
||||
; �… ˆ‘�Ž‹œ‡Ž‚€’œ!!!
|
||||
|
||||
RET NZ
|
||||
|
||||
LD (03EE0h),A ; multiple !
|
||||
|
||||
RET
|
||||
|
||||
;*******************************
|
||||
|
||||
FLAG: DB 0
|
||||
|
||||
STRING: DB "ACEX_30K_LOADING" ; ä« £ ¯¥à¥§ £à㧪¨
|
||||
|
||||
;*******************************
|
||||
|
||||
READ_FROM_FILE: ; ç¨â âì ä ©« ¯à®è¨¢ª¨ =64k
|
||||
|
||||
LD A,1
|
||||
LD HL,ROM_FILE
|
||||
LD C,11h
|
||||
RST 10h
|
||||
DI
|
||||
JP C,ERROR_FILE1
|
||||
LD (FILE_HANDLE),A
|
||||
|
||||
IN A,(PAGE3)
|
||||
PUSH AF
|
||||
LD A,1Ch
|
||||
OUT (PAGE3),A
|
||||
|
||||
LOOP_READ:
|
||||
LD A,(FILE_HANDLE)
|
||||
LD HL,0C000h
|
||||
LD DE,4000h
|
||||
LD C,13h
|
||||
RST 10h
|
||||
DI
|
||||
JP C,ERROR_FILE
|
||||
|
||||
AND A
|
||||
LD HL,4000h
|
||||
SBC HL,DE
|
||||
JP NZ,ERROR_FILE
|
||||
|
||||
IN A,(PAGE3)
|
||||
INC A
|
||||
OUT (PAGE3),A
|
||||
CP 20h
|
||||
JR NZ,LOOP_READ
|
||||
|
||||
LD A,(FILE_HANDLE)
|
||||
LD C,12h
|
||||
RST 10h
|
||||
DI
|
||||
JP C,ERROR_FILE
|
||||
POP AF
|
||||
OUT (PAGE3),A
|
||||
RET
|
||||
|
||||
ERROR_FILE:
|
||||
POP AF
|
||||
OUT (PAGE3),A
|
||||
ERROR_FILE1:
|
||||
|
||||
LD A,(FILE_HANDLE) ; § ªàëâì, ¥á«¨ ¡ë« ®âªàëâ
|
||||
AND A
|
||||
JR Z,NO_CLOSE
|
||||
LD C,12h
|
||||
RST 10h
|
||||
|
||||
NO_CLOSE:
|
||||
|
||||
LD HL,ERROR_MSG
|
||||
LD C,5Ch
|
||||
RST 10h
|
||||
DI
|
||||
|
||||
LD C,41h
|
||||
LD B,0
|
||||
RST 10h
|
||||
|
||||
RET
|
||||
|
||||
DI
|
||||
HALT
|
||||
|
||||
FILE_HANDLE: db 0
|
||||
|
||||
ERROR_MSG: db "File ERROR!",13,10,0
|
||||
|
||||
ROM_FILE: db "GAME_00.ACX",0,0,0,0,0
|
||||
|
||||
;*************************************************
|
||||
|
||||
SET_RETURN: ; ¯à®£à ¬¬ ¤«ï ãáâ ®¢ª¨
|
||||
; ¢®§¢à â ¯®á«¥ ¯¥à¥§ £à㧪¨
|
||||
; LD DE,RELOAD_RET ; €„�…‘ ‚އ‚�€’€
|
||||
|
||||
DI
|
||||
|
||||
IN A,(PAGE3)
|
||||
LD (APG3+1),A
|
||||
|
||||
LD A,41h
|
||||
OUT (PAGE3),A ; ®âªàëâì ᯥæ-áâà ¨æã
|
||||
|
||||
LD (0FFF4h),DE ; ¤à¥á ¯à®£à ¬¬ë ¯¥à¥§ ¯ãáª
|
||||
|
||||
LD A,"Z"
|
||||
LD (0FFFEh),A
|
||||
LD A,"X"
|
||||
LD (0FFFFh),A ; ä« £ ¯¥à¥§ ¯ãáª
|
||||
|
||||
|
||||
IN A,(PAGE0) ; á®åà ïâì áâà ¨æë
|
||||
LD (0FFF0h),A ; DOS-PAGE
|
||||
IN A,(PAGE1)
|
||||
LD (0FFF1h),A ;
|
||||
IN A,(PAGE2)
|
||||
LD (0FFF2h),A ; ¯à®£à ¬¬ë ¤«ï ¢®§¢à â ???
|
||||
IN A,(PAGE3)
|
||||
LD (0FFF3h),A ;
|
||||
|
||||
LD A,(APG3+1)
|
||||
OUT (PAGE3),A
|
||||
|
||||
RET
|
||||
|
||||
;**************************************************************
|
||||
|
||||
RELOAD_RET: ; ¬¥áâ®, ªã¤ ¯à®¨§¢¥¤¥ ¢®§¢à â ¯®á«¥ ¯¥à¥§ £à㧪¨
|
||||
; ®¢®© ¯à®è¨¢ª¨
|
||||
|
||||
DI
|
||||
LD SP,0BFF0h
|
||||
LD A,CNF_0 ; ª®ä¨£ãà æ¨ï ¨ ®âª«î票¥ �‡“
|
||||
OUT (SYS_PORT_OFF),A
|
||||
|
||||
LD A,(0FFF0h) ; SET PAGE DOS
|
||||
OUT (PAGE0),A
|
||||
|
||||
APG3: LD A,41h ; ¢®§¢à â áâ ன áâà ¨æë PAGE3
|
||||
OUT (PAGE3),A
|
||||
|
||||
;*****************************************************************
|
||||
; ¢ë§®¢ ®á®¢®© ¯à®£à ¬¬ë ¤«ï à ¡®âë á ®¢®© ¯à®è¨¢ª®©
|
||||
; à ¡®â î⠢ᥠäãæ¨¨ DOS/BIOS, ªà®¬¥ äãªæ¨© íªà
|
||||
|
||||
CALL MAIN_PROGRAMM
|
||||
|
||||
;*****************************************************************
|
||||
; ¢®§¢à â ¢ áâ àãî ¯à®£à ¬¬ã (RESET!)
|
||||
|
||||
LD DE,RELOAD_RET2
|
||||
CALL SET_RETURN ; ãáâ ®¢ª ¤ ëå ¤«ï ¢®§¢à â
|
||||
|
||||
JP RESET
|
||||
|
||||
RELOAD_RET2: ; áî¤ ¤®«¦® ¡ë ¢ë室¨âì ¯®á«¥ ¢®§¢à â ¯à®è¨¢ª¨,
|
||||
; ® ¯®ª ¥ ¢ë室¨â
|
||||
|
||||
DI
|
||||
LD SP,0BFF0h
|
||||
LD A,CNF_0 ; ª®ä¨£ãà æ¨ï ¨ ®âª«î票¥ �‡“
|
||||
OUT (SYS_PORT_OFF),A
|
||||
|
||||
LD A,(0FFF0h) ; SET PAGE DOS
|
||||
OUT (PAGE0),A
|
||||
|
||||
LD A,(APG3+1)
|
||||
OUT (PAGE3),A
|
||||
|
||||
LD C,41h ; RET TO DOS
|
||||
LD B,0
|
||||
RST 10h
|
||||
|
||||
RET
|
||||
|
||||
;*****************************************************************
|
||||
;
|
||||
; ”®à¬ â ०¨¬ § ª®¬¥áâ
|
||||
; €¤à¥á â®â ¦¥
|
||||
;
|
||||
; � ©â 0
|
||||
; bit 7..6 - ®¬¥à ¯ «¨âàë
|
||||
; bit 5 - £à 䨪 /⥪áâ, ¤®«¦® ¡ëâì 0 (⥪áâ ¥â)
|
||||
; bit 4 - ०¨¬ 640/320 â®ç¥ª ¢ «¨¨¨
|
||||
; bit 3 - १¥à¢ - ¤®«¦ë ¡ëâì 0
|
||||
; bit 2 - à §à¥è¥¨¥ ᬥ饨ï á¥âª¨
|
||||
; bit 1..0 - 2 áâ àè¨å ¡¨â ª®®à¤¨ âë X
|
||||
;
|
||||
; � ©â 1 8 ¬« ¤è¨å ¡¨â ª®®à¤¨ âë X
|
||||
;
|
||||
; � ©â 2 ª®®à¤¨ â Y
|
||||
;
|
||||
; � ©â 3 ᬥ饨¥ á¥âª¨ ª®®à¤¨ â
|
||||
; bit 3..0 - ᬥ饨¥ ¯® X
|
||||
; bit 7..4 - ᬥ饨¥ ¯® Y
|
||||
;
|
||||
; Š¢ ¤à ⨪ £à 䨪¨ 8x8 ¢ë¢®¤¨âáï ¨§ ¢¨àâ㠫쮣® íªà 1024x256
|
||||
; ¢ ᮮ⢥âá⢨¨ á ª®®à¤¨ â ¬¨ ¢¥à奣® «¥¢®£®
|
||||
; 㣫 § ª®¬¥áâ , § ¤ ®£® ¢ ¡ ©â å ०¨¬
|
||||
;
|
||||
; ‘¬¥é¥¨¥ á¥âª¨ § ¤ ¥âáï âà¥â쨬 ¡ ©â®¬ ०¨¬ íªà
|
||||
; „¥©áâ¢ã¥â ⮫쪮, ᮯ஢®¦¤ ¥¬ë© ¥¤¨¨æ¥©
|
||||
; ¢ ¡¨â¥ 2 ã«¥¢®£® ¡ ©â ०¨¬
|
||||
; …᫨ ¡¨â 2 ¥ ¡ë« ãáâ ®¢«¥, ⮠ᬥ饨¥
|
||||
; Ž‘’€…’‘Ÿ ’…Œ, —’Ž �›‹Ž “‘’€�Ž‚‹…�Ž �€�……
|
||||
; „¥©á⢨¥ ¡ ©â § ¤ ®£® ¢ § ª®¬¥á⥠¢ª«îç ¥âáï á«¥¤ãî饬
|
||||
; § ª®¬¥áâ¥
|
||||
;
|
||||
;
|
||||
;*****************************************************************
|
||||
|
||||
MAIN_PROGRAMM:
|
||||
|
||||
IN A,(PAGE3) ; á®åà ¨âì ¯®àâë
|
||||
PUSH AF
|
||||
IN A,(PORT_Y)
|
||||
PUSH AF
|
||||
|
||||
LD A,50h
|
||||
OUT (PAGE3),A ; íªà ¢ PAGE3
|
||||
|
||||
LD A,0 ; ª®®à¤¨ â Y
|
||||
LD DE,6180h ; ª®®à¤¨ â X ¯«îá ०¨¬
|
||||
|
||||
CALL CLEAR_SH ; ®ç¨á⪠4-£® ¡ ©â ०¨¬ íªà
|
||||
|
||||
CALL MAIN_SCROLL; § ¤ ¨¥ ®¢®£® £à ä.०¨¬
|
||||
|
||||
CALL PIC_SET ; ¯à®à¨á®¢ª ª à⨪¨ (á¥âª )
|
||||
|
||||
LD A,0 ; ª®®à¤¨ â Y
|
||||
LD DE,6180h ; ª®®à¤¨ â X ¯«îá ०¨¬
|
||||
LD BC,100 ; ç¨á«® ä३¬®¢ ¤® ¢ë室 C*256
|
||||
LOOP_SCR:
|
||||
PUSH AF
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
|
||||
CALL MAIN_SCROLL2 ; ®¢ë© áªà®««¨£
|
||||
|
||||
POP BC
|
||||
POP DE
|
||||
|
||||
LD A,1 ; ¬¥ï¥¬ ª®®à¤¨ âã X
|
||||
ADD_PAR2 EQU $-1
|
||||
ADD A,E
|
||||
LD E,A
|
||||
|
||||
CP 0FFh
|
||||
JR NZ,NO_X1
|
||||
LD A,-1
|
||||
LD (ADD_PAR2),A
|
||||
NO_X1:
|
||||
CP 0
|
||||
JR NZ,NO_X2
|
||||
LD A,1
|
||||
LD (ADD_PAR2),A
|
||||
NO_X2:
|
||||
|
||||
|
||||
POP AF
|
||||
ADD A,1 ; ¬¥ï¥¬ ª®®à¤¨ âã Y
|
||||
ADD_PAR1 EQU $-1
|
||||
|
||||
PUSH AF
|
||||
|
||||
CP 0F0h
|
||||
JR NZ,NO_X3
|
||||
LD A,-1
|
||||
LD (ADD_PAR1),A
|
||||
NO_X3:
|
||||
CP 0
|
||||
JR NZ,NO_X4
|
||||
LD A,1
|
||||
LD (ADD_PAR1),A
|
||||
NO_X4:
|
||||
|
||||
LD A,7
|
||||
OUT (0FEh),A ; ¡®à¤¥à ï 㪠§ª
|
||||
|
||||
EI
|
||||
HALT
|
||||
|
||||
LD A,0
|
||||
OUT (0FEh),A
|
||||
|
||||
POP AF
|
||||
|
||||
DJNZ LOOP_SCR
|
||||
DEC C
|
||||
JR NZ,LOOP_SCR
|
||||
|
||||
POP AF ; ¢®ááâ ®¢¨âì ¯®àâë
|
||||
OUT (PORT_Y),A
|
||||
POP AF
|
||||
OUT (PAGE3),A
|
||||
|
||||
RET
|
||||
|
||||
;******************************************
|
||||
|
||||
MAIN_SCROLL2:
|
||||
DI
|
||||
|
||||
IN A,(PORT_Y)
|
||||
PUSH AF
|
||||
|
||||
|
||||
LD HL,0C310h ; ç¨ ï á 4-© áâப¨ ᢥàåã
|
||||
LOOP_SC1:
|
||||
LD A,5 ; ç¨ ¥¬ á N-£® § ª®¬¥áâ ०¨¬
|
||||
; LD A,N*2-1
|
||||
; ᬥ饨¥ ¢ ã«¥¢®¬ § ª®¬¥áâ¥
|
||||
; § ¤ ® ª ª ®«ì ¨ ¬®¦¥â ¡ëâì
|
||||
; ᬥ饮 ª ª 56-¥ § ª®¬¥áâ®,
|
||||
; ãáâ ®¢ª®© á¬¥é¥¨ï ¢ 55-¬
|
||||
;
|
||||
|
||||
OUT (PORT_Y),A
|
||||
|
||||
LD A,(HL)
|
||||
OR 04h
|
||||
LD (HL),A ; ãáâ ®¢ª ¡¨â 2 ¤«ï ¢ª«î票ï ᬥ饨ï
|
||||
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
LD A,(COUNT1)
|
||||
LD (HL),A ; ãáâ ®¢ª ᬥ饨ï
|
||||
|
||||
INC L
|
||||
|
||||
LD A,L
|
||||
CP 70h ; § ª 稢 ¥¬ 28-© áâப¥
|
||||
JR NZ,LOOP_SC1
|
||||
|
||||
|
||||
LD HL,0C310h ; ç¨ ï á 4-© áâப¨
|
||||
LOOP_SC2:
|
||||
|
||||
LD A,75 ; 38-¬ § ª®¬¥áâ¥
|
||||
OUT (PORT_Y),A
|
||||
|
||||
LD A,(HL)
|
||||
OR 04h
|
||||
LD (HL),A ; ãáâ ¢«¨¢ ¥¬ ®¢®¥ ᬥ饨¥
|
||||
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
LD (HL),88h ; á® § 票¥¬ 8 ¯¨ªá¥«¥© ¯® £®à-«¨
|
||||
; ¨ 8 ¯® ¢¥à⨪ «¨
|
||||
; ¯®áâ®ï®
|
||||
INC L
|
||||
|
||||
LD A,L
|
||||
CP 78h ; § ª 稢 ¥¬ 30-© áâப¥
|
||||
; (¤¢¥ «¨è¨å áâப¨, çâ® ¡ë
|
||||
; áà ¡®â «¨ ¡ ©âë ¢ ᬥ饮¬ ¯®
|
||||
; ¢¥à⨪ «¨ § ª®¬¥áâ¥)
|
||||
JR NZ,LOOP_SC2
|
||||
|
||||
POP AF
|
||||
OUT (PORT_Y),A
|
||||
|
||||
|
||||
LD A,(COUNT2) ; "¯« ¢®¥" ¨§¬¥¥¨¥ áç¥â稪 ¤«ï ¤¥¬®áâà æ¨¨
|
||||
ADD A,40h ; ᬥ饨ï
|
||||
LD (COUNT2),A
|
||||
JR NC,no_add1
|
||||
LD A,(COUNT1)
|
||||
ADD A,11h
|
||||
AND 77h
|
||||
LD (COUNT1),A
|
||||
no_add1:
|
||||
|
||||
RET
|
||||
|
||||
COUNT1: db 0
|
||||
COUNT2: db 0
|
||||
|
||||
;******************************************************
|
||||
|
||||
CLEAR_SH: ; § ¡¨¢ îâáï ã«ï¬¨ ¢á¥ 3-¨ ¡ ©âë ०¨¬
|
||||
IN A,(PORT_Y) ; ¢á¥¬ íªà ¥ (¢ ⮬ ç¨á«¥ ¡®à¤¥à¥ ¨ ¡« ª¥!)
|
||||
PUSH AF ; ªá¥«¥à â®à®¬
|
||||
|
||||
XOR A
|
||||
OUT (PORT_Y),A
|
||||
LD HL,0C303h
|
||||
|
||||
|
||||
CLEAR_LOOP:
|
||||
DI
|
||||
LD D,D
|
||||
LD A,0
|
||||
LD E,E
|
||||
LD (HL),A
|
||||
LD B,B
|
||||
EI
|
||||
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
|
||||
LD A,L
|
||||
CP 0B3h
|
||||
JR NZ,CLEAR_LOOP
|
||||
|
||||
POP AF
|
||||
OUT (PORT_Y),A
|
||||
RET
|
||||
|
||||
;*********************************************
|
||||
|
||||
PIC_SET: ; à¨áã¥âáï á¥âª
|
||||
; ¨ ª¢ ¤à ⨪¨
|
||||
IN A,(PORT_Y)
|
||||
PUSH AF
|
||||
|
||||
DI
|
||||
|
||||
LD D,D
|
||||
LD A,8
|
||||
LD B,B
|
||||
|
||||
LD HL,0C000h
|
||||
LD C,0
|
||||
LOOP_SC7:
|
||||
LD A,0
|
||||
LOOP_SC6:
|
||||
LD B,8
|
||||
LOOP_SC5:
|
||||
OUT (PORT_Y),A
|
||||
|
||||
LD C,C
|
||||
LD (HL),C
|
||||
LD B,B
|
||||
|
||||
INC A
|
||||
DJNZ LOOP_SC5
|
||||
|
||||
INC C
|
||||
AND A
|
||||
JR NZ,LOOP_SC6
|
||||
|
||||
LD A,L
|
||||
ADD A,8
|
||||
LD L,A
|
||||
LD A,H
|
||||
ADC A,0
|
||||
LD H,A
|
||||
CP 0C3h
|
||||
JR NZ,LOOP_SC7
|
||||
|
||||
LD HL,0C000h
|
||||
LD C,0FFh
|
||||
LD D,D
|
||||
LD A,0
|
||||
LD B,B
|
||||
LOOP_SC3:
|
||||
LD E,E
|
||||
LD (HL),C ; vertical lines
|
||||
LD B,B
|
||||
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
|
||||
LD E,E
|
||||
LD (HL),C ; vertical lines
|
||||
LD B,B
|
||||
|
||||
INC HL
|
||||
|
||||
LD A,H
|
||||
CP 0C3h
|
||||
JR NZ,LOOP_SC3
|
||||
|
||||
LD A,0
|
||||
OUT (PORT_Y),A
|
||||
LD HL,0C000h
|
||||
|
||||
LOOP_SC4:
|
||||
OUT (PORT_Y),A
|
||||
|
||||
LD C,C
|
||||
LD (HL),C ; horizontal line
|
||||
INC H
|
||||
LD (HL),C
|
||||
INC H
|
||||
LD (HL),C
|
||||
LD B,B
|
||||
|
||||
ADD A,7
|
||||
OUT (PORT_Y),A
|
||||
|
||||
LD C,C
|
||||
LD (HL),C ; horizontal line
|
||||
DEC H
|
||||
LD (HL),C
|
||||
DEC H
|
||||
LD (HL),C
|
||||
LD B,B
|
||||
|
||||
INC A
|
||||
JR NZ,LOOP_SC4
|
||||
|
||||
|
||||
POP AF
|
||||
OUT (PORT_Y),A
|
||||
|
||||
RET
|
||||
|
||||
;*********************************************
|
||||
; ãáâ ®¢ª ०¨¬ íªà
|
||||
|
||||
MAIN_SCROLL: ; A - ª®®à¤¨ â Y
|
||||
PUSH DE
|
||||
CALL Y_SET ; ãáâ ®¢¨âì ¤ ë¥ Y ª®®à¤¨ âë ¤«ï á⮫¡æ
|
||||
POP DE
|
||||
CALL X_SET
|
||||
|
||||
LD HL,0C302h ; ¤à¥á ०¨¬
|
||||
|
||||
LD BC,Y_DATA ; ¤à¥á ¯®«®¦¥¨© Y
|
||||
LD DE,X_DATA ; ¤à¥á ०¨¬®¢ ¨ ª®®à¤¨ â X ¢ áâப å
|
||||
|
||||
M_LOOP:
|
||||
PUSH HL
|
||||
|
||||
LD A,1
|
||||
OUT (PORT_Y),A
|
||||
|
||||
DI ; ªá¥«¥à â®à®¥ § ¯®«¥¨¥ ०¨¬ íªà
|
||||
; ¤«ï ®¤®© «¨¨¨ § ª®¬¥áâ
|
||||
LD D,D
|
||||
LD A,79 ; 40 § ª®¬¥áâ (® ç¥à¥§ 1!!!)
|
||||
LD B,B
|
||||
|
||||
LD A,(BC) ; ¢§ïâì § ¯®«¨â¥«ì ¤«ï Y ª®®à¤¨ âë
|
||||
|
||||
LD E,E ; § ¯®«ïâì ª®áâ ⮩, ¢¥à⨪ «ì®
|
||||
LD (HL),A
|
||||
LD B,B
|
||||
IN A,(PORT_Y) ; ¢®ááâ ®¢«¥¨¥ ¯®àâ
|
||||
OUT (PORT_Y),A
|
||||
|
||||
DEC L
|
||||
LD L,L
|
||||
LD A,(DE) ; ¢§ïâì «¨¨î ०¨¬®¢
|
||||
LD A,A
|
||||
LD (HL),A ; ãáâ ®¢¨âì ०¨¬, ¢¥à⨪ «ì®
|
||||
LD B,B
|
||||
INC DE
|
||||
|
||||
IN A,(PORT_Y) ; ¢®ááâ ®¢«¥¨¥ ¯®àâ
|
||||
OUT (PORT_Y),A
|
||||
|
||||
DEC L
|
||||
LD L,L
|
||||
LD A,(DE) ; ¢§ïâì ¢â®àãî «¨¨î ०¨¬®¢
|
||||
LD A,A
|
||||
LD (HL),A ; ãáâ ®¢¨âì ०¨¬
|
||||
LD B,B
|
||||
DEC DE
|
||||
|
||||
IN A,(PORT_Y) ; ¢®ááâ ®¢«¥¨¥ ¯®àâ
|
||||
OUT (PORT_Y),A
|
||||
|
||||
POP HL
|
||||
INC L
|
||||
INC L
|
||||
INC L
|
||||
INC L ; á«¥¤ãîé ï áâப
|
||||
INC BC ; á«¥¤ãî騩 Y
|
||||
LD A,L
|
||||
CP 82h
|
||||
JR NZ,M_LOOP ; ¯®¢â®àïâì § ¯®«¥¨¥ ०¨¬
|
||||
|
||||
EI
|
||||
RET
|
||||
|
||||
;******************************************
|
||||
|
||||
Y_SET: ; A - Y_coord
|
||||
LD HL,Y_DATA ; ¤à¥á ¤ ëå
|
||||
LD B,32
|
||||
M_LP1:
|
||||
LD (HL),A ; Y ª®®à¤¨ âë ¤«ï ¢á¥å ª¢ ¤à ⨪®¢ ®¤®© áâப¨
|
||||
INC HL
|
||||
ADD A,8 ; 㢥«¨ç¨âì 8 ¤«ï á«¥¤ãî饩 áâப¨
|
||||
DJNZ M_LP1
|
||||
RET
|
||||
|
||||
;******************************************
|
||||
|
||||
X_SET: ; DE - X_coord + MODE
|
||||
LD HL,X_DATA ; ¤à¥á ¤ ëå
|
||||
LD B,40
|
||||
M_LPX1:
|
||||
LD (HL),E ; § ¯®¬¨âì ª®®à¤¨ âã ¤«ï ª¢ ¤à ⨪
|
||||
INC HL
|
||||
LD (HL),D
|
||||
INC HL
|
||||
LD A,E
|
||||
ADD A,8 ; 㢥«¨ç¨âì 8 ¤«ï á«¥¤ãî饣®
|
||||
LD E,A
|
||||
LD A,D
|
||||
ADC A,0
|
||||
LD D,A
|
||||
DJNZ M_LPX1 ; ¯®¢â®àïâì 40 à §
|
||||
|
||||
RET
|
||||
|
||||
;******************************************
|
||||
|
||||
X_DATA: DS 80 ; ¡®à ०¨¬®¢ ®¤®© áâப¨
|
||||
Y_DATA: DS 32 ; ¤ ë¥ Y (à áç¥âë¥)
|
||||
|
||||
|
||||
;*****************************************************************
|
||||
|
||||
DSS 8700h,255
|
||||
|
||||
.DEPHASE
|
||||
END
|
||||
|
||||
|
||||
Reference in New Issue
Block a user