c71e249a4e
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>
823 lines
12 KiB
Plaintext
823 lines
12 KiB
Plaintext
|
||
.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
|
||
|
||
|