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,194 @@
|
||||
;[]=======================================================================[]
|
||||
;
|
||||
; main.z80 -- stub file for TextOut procedures
|
||||
;
|
||||
; Created by Anton Enin 26-June-2002
|
||||
;
|
||||
; Last update 27-June-2002
|
||||
;
|
||||
; Copyright (C) 2002 R-lab
|
||||
;
|
||||
; This program should be compiled using z80asm
|
||||
; http://www.zxasm.narod.ru/
|
||||
;
|
||||
; z80asm.exe -f bin main.z80 -o a_print.exe
|
||||
;
|
||||
;[]=======================================================================[]
|
||||
; Sprinter constans -- see Sprinter docs
|
||||
|
||||
VPAGE equ 0x50 ; video memory page
|
||||
YPORT equ 0x89 ; y pos for write to the vram
|
||||
PAGE0 equ 0x82 ; memory page ports
|
||||
PAGE1 equ 0xA2 ;
|
||||
PAGE2 equ 0xC2 ;
|
||||
PAGE3 equ 0xE2 ;
|
||||
|
||||
struc HeaderStruct ; Estex Exe Header
|
||||
id: resb 3 ; exe file Id (must be 'EXE')
|
||||
version: resb 1 ; exe file version
|
||||
code_offeset: resd 1 ; offset to start code (header size)
|
||||
loader_size: resw 1 ; first loader size
|
||||
reserved1: resw 3 ; reserved
|
||||
start_address: resw 1 ; program org
|
||||
entry_point: resw 1 ; program entry point
|
||||
stack_point: resw 1 ; program stack point
|
||||
reserved2: resb 490 ; reserved
|
||||
endstruc
|
||||
|
||||
FONT_BASE equ 0x8000
|
||||
|
||||
;[]=======================================================================[]
|
||||
|
||||
section .text
|
||||
org 0x7E00
|
||||
|
||||
;[]=======================================================================[]
|
||||
; EXE header
|
||||
|
||||
ExeHeader: istruc HeaderStruct ; initialized structure
|
||||
at id, db 'EXE'
|
||||
at version, db 0
|
||||
at code_offeset, dd CodeStart - ExeHeader
|
||||
at loader_size, dw 0
|
||||
at start_address, dw 0x8000
|
||||
at entry_point, dw EntryPoint
|
||||
at stack_point, dw 0xBFFF
|
||||
iend
|
||||
CodeStart: ; start address is 0x8000
|
||||
;[]=======================================================================[]
|
||||
MyFont: ; characters images
|
||||
incbin "font.raw"
|
||||
|
||||
;[]=======================================================================[]
|
||||
; palette from Flex Navigator
|
||||
CustomPalette:
|
||||
db 0x00, 0x00, 0x00, 0x00 ; Black 00
|
||||
db 0x00, 0x00, 0xFF, 0x00 ; B.Red 01
|
||||
db 0x00, 0x80, 0x00, 0x00 ; Green 02
|
||||
db 0x00, 0xFF, 0xFF, 0x00 ; B.Yellow 03
|
||||
db 0x80, 0x00, 0x00, 0x00 ; Blue 04
|
||||
db 0xFF, 0xFF, 0x00, 0x00 ; Invert bg 05
|
||||
db 0x80, 0x00, 0x00, 0x00 ; Invert fg 06
|
||||
db 0x80, 0x80, 0x80, 0x00 ; BlackGray 07
|
||||
db 0xC0, 0xC0, 0xC0, 0x00 ; HighGray 08
|
||||
db 0x80, 0x00, 0x00, 0x00 ; Panel 09
|
||||
db 0xFF, 0xFF, 0x00, 0x00 ; Files 0A
|
||||
db 0x00, 0xFF, 0xFF, 0x00 ; Select Files 0B
|
||||
db 0x00, 0xFF, 0xFF, 0x00 ; InvSel Files 0C
|
||||
db 0xC0, 0xC0, 0xC0, 0x00 ; Reserved 0D
|
||||
db 0xFF, 0xFF, 0xFF, 0x00 ; White 0E
|
||||
db 0xFF, 0xFF, 0xFF, 0x00 ; White 0F
|
||||
|
||||
;[]=======================================================================[]
|
||||
; entry point
|
||||
align 16
|
||||
EntryPoint:
|
||||
call SetVideoMode ; set video mode
|
||||
|
||||
ld hl, TextStr1 ; text string
|
||||
ld de, 0x0020 ; x position
|
||||
ld bc, 0x0000 ; y position
|
||||
ld a, 0x02 ; background color = 0x00
|
||||
; foreground color = 0x02
|
||||
call TextOut
|
||||
|
||||
ld hl, TextStr2 ; text string
|
||||
ld de, 0x0020 ; x position
|
||||
ld bc, 0x0008 ; y position
|
||||
ld a, 0x1F ; background color = 0x01
|
||||
; foreground color = 0x0F
|
||||
call TextOut
|
||||
|
||||
ld c, 0x30 ; wait keypressed
|
||||
rst 0x10
|
||||
|
||||
call ResVideoMode ; restore video mode
|
||||
|
||||
ld bc, 0x0041
|
||||
rst 0x10 ; return to OS
|
||||
|
||||
;[]=======================================================================[]
|
||||
; set requist video mode 640x256x16
|
||||
SetVideoMode:
|
||||
ld c, 0x51 ; save previos vmode
|
||||
rst 0x10
|
||||
ld (vmode + 1), a
|
||||
ld a, b
|
||||
ld (vscrn + 1), a
|
||||
sub a
|
||||
call CrearVideoRam
|
||||
ld bc, 0x0050 ; set 640x256x16
|
||||
ld a, 0x82
|
||||
rst 0x10
|
||||
ld hl, CustomPalette
|
||||
ld de, 0x1000
|
||||
ld bc, 0xFFA4
|
||||
sub a
|
||||
rst 0x08 ; load palette
|
||||
ret
|
||||
|
||||
;[]=======================================================================[]
|
||||
; restore previos video mode
|
||||
ResVideoMode:
|
||||
sub a
|
||||
call CrearVideoRam
|
||||
vscrn: ld b, 0x00
|
||||
vmode: ld a, 0x00
|
||||
ld c, 0x50
|
||||
rst 0x10 ; set previos vmode
|
||||
ret
|
||||
|
||||
;[]=======================================================================[]
|
||||
; Clear video memory (first screen)
|
||||
; Input:
|
||||
; a - clear color (0-15)
|
||||
CrearVideoRam:
|
||||
and 0x0F
|
||||
ld e, a
|
||||
rlca
|
||||
rlca
|
||||
rlca
|
||||
rlca
|
||||
or e
|
||||
ld e, a
|
||||
in a, (YPORT) ; store modify ports
|
||||
ld c, a
|
||||
in a, (PAGE1)
|
||||
ld b, a
|
||||
push bc
|
||||
ld a, VPAGE
|
||||
out (PAGE1), a
|
||||
ld hl, 0x4000
|
||||
ld bc, 320 ; screen x size in bytes
|
||||
di
|
||||
ld d, d
|
||||
ld a, 0x00 ; set accel lenght to 256 bytes
|
||||
.loop: ld e, e ; fill vertical lines
|
||||
ld (hl), e
|
||||
ld b, b
|
||||
inc hl
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .loop
|
||||
ei
|
||||
pop bc
|
||||
ld a, b
|
||||
out (PAGE1), a
|
||||
ld a, c
|
||||
out (YPORT), a ; restore modify ports
|
||||
ret
|
||||
|
||||
;[]=======================================================================[]
|
||||
|
||||
%include "print.z80"
|
||||
|
||||
;[]=======================================================================[]
|
||||
; some text
|
||||
TextStr1: db 'Color print with acceleration.', 0
|
||||
TextStr2: db 'Written by Enin Anton. (c) Copyright 2002 R-lab', 0
|
||||
|
||||
;[]=======================================================================[]
|
||||
|
||||
CodeEnd:
|
||||
|
||||
Reference in New Issue
Block a user