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>
195 lines
5.1 KiB
Z80 Assembly
195 lines
5.1 KiB
Z80 Assembly
;[]=======================================================================[]
|
|
;
|
|
; 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:
|
|
|