Files
snark13 c71e249a4e 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>
2026-06-03 16:13:21 +03:00

823 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
.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