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
+295
@@ -0,0 +1,295 @@
|
||||
DEVICE ZXSPECTRUM128
|
||||
Start_addr = 0x4200
|
||||
|
||||
use_emulator = 1
|
||||
|
||||
include "../../include/estex_h.asm"
|
||||
include "../../include/head_short2.inc"
|
||||
include "../../include/macro.s"
|
||||
|
||||
Counter = 0xfe5b
|
||||
|
||||
|
||||
LoaderStart:
|
||||
main: di
|
||||
ld sp,stack_buff
|
||||
jp begin
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
init0: SYS ESTEX_getvmode ;ïîëó÷èòü òåêóùèé ðåæèì ýêðàíà
|
||||
ld (vmode.mode),a ;ñîõðàíèòü ðåæèì
|
||||
ex af,af
|
||||
ld a,b
|
||||
ld (vmode.screen),a ;è ñòðàíèöó (ýêðàí) ðåæèìà
|
||||
ex af,af
|
||||
ld b,_VMODE._T80 ;òåêñòîâûé ðåæèì 80 ñèì.â ñòðîêå
|
||||
cp b ;òåêóùèé ðåæèì ñîâïàäàåò?
|
||||
; jr z,.next_init0 ;äà
|
||||
ret z
|
||||
ld a,b
|
||||
ld b,1 ;èíà÷å
|
||||
ld c,ESTEX_setvmode ;óñòàíîâèòü åãî
|
||||
rst 0x10
|
||||
ret
|
||||
|
||||
|
||||
WaitMsCallibration:
|
||||
di
|
||||
ld a,WaitMS_IntVector
|
||||
ld i,a
|
||||
im 2
|
||||
ei
|
||||
halt
|
||||
call WaitMS_LockCounter
|
||||
di
|
||||
im 1
|
||||
ld de,(WaitMS_LockHL)
|
||||
ld hl,20
|
||||
call WaitMS_DIV_DE_HL
|
||||
ld l,e
|
||||
ld h,d
|
||||
call WaitMS_NOT_HL
|
||||
ld (walcx0+1),hl
|
||||
ret
|
||||
|
||||
|
||||
;HL=-HL
|
||||
WaitMS_NOT_HL: ld a,l
|
||||
cpl
|
||||
ld l,a
|
||||
ld a,h
|
||||
cpl
|
||||
ld h,a
|
||||
inc hl
|
||||
ret
|
||||
|
||||
;DE = DE/HL
|
||||
WaitMS_DIV_DE_HL:
|
||||
push hl
|
||||
call WaitMS_NOT_HL
|
||||
ld c,l
|
||||
ld b,h
|
||||
ld hl,0
|
||||
ld a,e
|
||||
add a,a
|
||||
rl d
|
||||
call wmdi08
|
||||
call wmdi08
|
||||
ld e,a
|
||||
pop bc
|
||||
srl b
|
||||
rr c
|
||||
or a
|
||||
sbc hl,bc
|
||||
ret c
|
||||
inc de
|
||||
ret
|
||||
|
||||
wmdi08: call wmdi04
|
||||
wmdi04: call wmdi02
|
||||
wmdi02: call wmdi01
|
||||
wmdi01: adc hl,hl
|
||||
add hl,bc
|
||||
jr c,$+4
|
||||
sbc hl,bc
|
||||
rla
|
||||
rl d
|
||||
ret
|
||||
|
||||
|
||||
;One MS Delay
|
||||
WaitMS_LockCounter:
|
||||
push hl
|
||||
walcx0: ld hl,Counter
|
||||
walcx1: inc hl ;6 = 26
|
||||
ld a,l ;4
|
||||
or h ;4
|
||||
jr nz,walcx1 ;12.7
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
||||
;HL = Milliseconds Number
|
||||
DelayMS:
|
||||
DEMSCx1: ld a,l
|
||||
or h
|
||||
ret z
|
||||
push hl
|
||||
call WaitMS_LockCounter
|
||||
pop hl
|
||||
dec hl
|
||||
jr DEMSCx1
|
||||
|
||||
|
||||
SysPrint: ld a,(hl)
|
||||
inc hl
|
||||
or a
|
||||
ret z
|
||||
push hl
|
||||
call SysPrintChar
|
||||
pop hl
|
||||
jr SysPrint
|
||||
|
||||
SysPrintChar: push bc
|
||||
ld c,0x5b ; print char
|
||||
rst 0x10
|
||||
pop bc
|
||||
ret
|
||||
|
||||
|
||||
; IN:HL=VALUE
|
||||
SysPrintDEC: LD C,255
|
||||
LD DE,10000
|
||||
CALL SYPDCx0
|
||||
LD DE,1000
|
||||
CALL SYPDCx0
|
||||
LD DE,100
|
||||
CALL SYPDCx0
|
||||
LD DE,10
|
||||
CALL SYPDCx0
|
||||
LD A,L
|
||||
JR SYPDCx2
|
||||
SYPDCx0: XOR A
|
||||
DEC A
|
||||
SYPDCx1: INC A
|
||||
SBC HL,DE
|
||||
JR NC,SYPDCx1
|
||||
ADD HL,DE
|
||||
INC C
|
||||
JR NZ,SYPDCx2
|
||||
DEC C
|
||||
OR A
|
||||
RET Z
|
||||
SYPDCx2: INC C
|
||||
ADD A,48
|
||||
PUSH HL
|
||||
push DE
|
||||
push BC
|
||||
CALL SysPrintChar
|
||||
POP BC
|
||||
pop DE
|
||||
pop HL
|
||||
RET
|
||||
|
||||
SysPrint0D0A: LD A,10
|
||||
LD C,05BH ; Print Char
|
||||
RST 16
|
||||
LD A,13
|
||||
LD C,05BH ; Print Char
|
||||
RST 16
|
||||
RET
|
||||
;-------------------------------------------------------------------------------
|
||||
;errors handles
|
||||
quit: ld b,0
|
||||
.err: ld c,0x41
|
||||
rst 0x10
|
||||
jr $
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
begin: call init0
|
||||
|
||||
ld hl,SomeText
|
||||
call SysPrint
|
||||
|
||||
; CALL WaitMsCallibration
|
||||
|
||||
; ld hl,(walcx0+1)
|
||||
; call SysPrintDEC
|
||||
|
||||
ld bc,(10000/250)*256
|
||||
lomx1: push bc
|
||||
ld a,c
|
||||
and 3
|
||||
jr nz,lomx4
|
||||
ld a,b
|
||||
rra
|
||||
rrca
|
||||
dec a
|
||||
ld l,a
|
||||
ld h,0
|
||||
call SysPrintDEC
|
||||
ld a,' '
|
||||
call SysPrintChar
|
||||
lomx4: ld hl,250
|
||||
call SysPrintDEC
|
||||
ld hl,TextMS
|
||||
call SysPrint
|
||||
pop hl
|
||||
push hl
|
||||
ld h,0
|
||||
ld a,l
|
||||
and 3
|
||||
ld l,a
|
||||
call SysPrintDEC
|
||||
ld a,'.'
|
||||
call SysPrintChar
|
||||
ld hl,250
|
||||
call DelayMS
|
||||
pop bc
|
||||
inc c
|
||||
push bc
|
||||
ld a,c
|
||||
and 3
|
||||
ld a,' '
|
||||
ld hl,SysPrintChar
|
||||
jr nz,lomx2
|
||||
ld hl,SysPrint0D0A
|
||||
lomx2: ld (lomx3+1),hl
|
||||
lomx3: call SysPrintChar
|
||||
pop bc
|
||||
djnz lomx1
|
||||
|
||||
|
||||
ld a,(vmode.mode)
|
||||
cp _VMODE._T80
|
||||
jr z,.exit
|
||||
|
||||
ld a,(vmode.screen)
|
||||
ld b,a
|
||||
ld a,(vmode.mode)
|
||||
SYS ESTEX_setvmode
|
||||
.exit ld bc,0x0041
|
||||
rst 0x10
|
||||
jr $
|
||||
|
||||
;Interrupt For Callibration Delay
|
||||
align 256
|
||||
WaitMS_IntVector = $/256-1
|
||||
org $-1
|
||||
dw WaitMS_IntCallibration
|
||||
|
||||
WaitMS_LockHL dw 0
|
||||
WaitMS_IntCallibration:
|
||||
ld (WaitMS_LockHL),hl
|
||||
ld hl,65535
|
||||
ei
|
||||
ret
|
||||
|
||||
|
||||
;===============================================================================
|
||||
vmode:
|
||||
.mode: db 0
|
||||
.screen: db 0
|
||||
|
||||
align 256
|
||||
str_buff: ds 256
|
||||
|
||||
stack_buff = $+255
|
||||
stack_buff_size = 256
|
||||
|
||||
;===============================================================================
|
||||
|
||||
SomeText: db "Test For Wait Milliseconds ...",cr,lf,0
|
||||
TextMS: db "ms.",0
|
||||
|
||||
;===============================================================================
|
||||
|
||||
|
||||
Loader_End:
|
||||
|
||||
display "Loader start: ", LoaderStart
|
||||
display "Loader end: ", Loader_End
|
||||
display "Loader size: ", Loader_End-LoaderStart
|
||||
savebin "delayms.exe",EXEHeader,$-EXEHeader
|
||||
Reference in New Issue
Block a user