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

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: