commit f95ff516e6143884f1777d1c2b7549d195272f9a Author: MallocNull Date: Sun Feb 2 19:06:33 2014 -0600 init commit there are jigs in the water supply diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/Wabbitemu.exe b/Wabbitemu.exe new file mode 100644 index 0000000..0efd4d8 Binary files /dev/null and b/Wabbitemu.exe differ diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..d1436e9 --- /dev/null +++ b/build.bat @@ -0,0 +1,41 @@ +@echo off + +cd src\00 +..\..\tools\spasm base.z80 -DPRIVPAGE=$1C -DRAMMASK=$40 +..\..\tools\spasm base.z80 ..\..\0083a.hex -DPRIVPAGE=$1c -DRAMMASK=$40 +..\..\tools\spasm base.z80 ..\..\0084a.hex -DPRIVPAGE=$3c -DRAMMASK=$80 +..\..\tools\spasm base.z80 ..\..\00SEa.hex -DPRIVPAGE=$7c -DRAMMASK=$80 +cd ..\..\ +more +1 0083a.hex > 0083.hex +more +1 0084a.hex > 0084.hex +more +1 00SEa.hex > 00SE.hex + +cd src\01 +..\..\tools\spasm base.z80 +..\..\tools\spasm base.z80 ..\..\01a.hex +cd ..\..\ +more +1 01a.hex > 01.hex + +cd src\privledged +..\..\tools\spasm base.z80 +..\..\tools\spasm base.z80 ..\..\priva.hex +cd ..\..\ +more +1 priva.hex > priv.hex + +tools\multihex 00 0083.hex 01 01.hex 1c priv.hex > os83.hex +tools\packxxu os83.hex -o os83.8xu -t 83p -q 04 -v 0.01 -h 255 +tools\rabbitsign -t 8xu -k tools\keys\04.key -K 04 -g -p -r os83.8xu + +tools\multihex 00 0084.hex 01 01.hex 3c priv.hex > os84.hex +tools\packxxu os84.hex -o os84.8xu -t 83p -q 0A -v 0.01 -h 255 +tools\rabbitsign -t 8xu -k tools\keys\0A.key -K 0A -g -p -r os84.8xu + +tools\multihex 00 00SE.hex 01 01.hex 7c priv.hex > osSE.hex +tools\packxxu osSE.hex -o osSE.8xu -t 83p -q 0A -v 0.01 -h 255 +tools\rabbitsign -t 8xu -k tools\keys\0A.key -K 0A -g -p -r osSE.8xu + +del os83.8xu +del os84.8xu +del osSE.8xu +del *.hex +del *.bin* \ No newline at end of file diff --git a/documentation.docx b/documentation.docx new file mode 100644 index 0000000..3065032 Binary files /dev/null and b/documentation.docx differ diff --git a/os83-signed.8xu b/os83-signed.8xu new file mode 100644 index 0000000..7085abd Binary files /dev/null and b/os83-signed.8xu differ diff --git a/os84-signed.8xu b/os84-signed.8xu new file mode 100644 index 0000000..ec81112 Binary files /dev/null and b/os84-signed.8xu differ diff --git a/osSE-signed.8xu b/osSE-signed.8xu new file mode 100644 index 0000000..3e56ff2 Binary files /dev/null and b/osSE-signed.8xu differ diff --git a/src/00/base.bin b/src/00/base.bin new file mode 100644 index 0000000..f2934d2 Binary files /dev/null and b/src/00/base.bin differ diff --git a/src/00/base.z80 b/src/00/base.z80 new file mode 100644 index 0000000..7246de2 --- /dev/null +++ b/src/00/base.z80 @@ -0,0 +1,33 @@ +.org $0000 + +#define SYSPROG $2000 ; todo figure out if i can decrease this later +#define SYSRESERVE $8000 +#define FREEMEM $9000 +#define PROGRAMRESERVE $D000 +#define STACKRESERVE $F000 + +#define SCREENBLOCK $8000 +#define SCREENPTR $8000+(16*8) +#define KEYBUF $8200 +#define CLOCK $8C00 + +#define CAPS $8AAA +#define NUMS $8AAB + +#include "header.z80" +#include "interrupts.z80" +#include "kernel.z80" +#include "utils.z80" +#include "display.z80" +#include "memory.z80" +#include "filesystem.z80" +#include "keyboard.z80" +#include "characters.z80" +.fill SYSPROG-$, $ff +; system programs +#include "dir.z80" +#include "cp.z80" +#include "cls.z80" +#include "sleep.z80" +#include "shutdown.z80" +#include "cd.z80" \ No newline at end of file diff --git a/src/00/cd.z80 b/src/00/cd.z80 new file mode 100644 index 0000000..ff6d183 --- /dev/null +++ b/src/00/cd.z80 @@ -0,0 +1,21 @@ +ChangeDirStart: +.db $BB +.dw EndChangeDir-ChangeDir +.db "cd.exe", 0 +.fill (ChangeDirStart + 24)-$ + +.org $D000 +ChangeDir: + pop hl + cp 1 + jp nz, cderr + ret +cderr: + ld hl, errmsg + call PrintString + ret +errmsg: + .db "Invalid params", 10 + .db "Syntax:", 10 + .db " cd A:-Z:", 0 +EndChangeDir: \ No newline at end of file diff --git a/src/00/characters.z80 b/src/00/characters.z80 new file mode 100644 index 0000000..d78782a --- /dev/null +++ b/src/00/characters.z80 @@ -0,0 +1,2308 @@ +characterIndex: + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %011100 +.db %100010 +.db %110110 +.db %100010 +.db %110110 +.db %101010 +.db %011100 +.db %000000 + +.db %011100 +.db %111110 +.db %101010 +.db %111110 +.db %101010 +.db %110110 +.db %011100 +.db %000000 + +.db %000000 +.db %010100 +.db %101010 +.db %100010 +.db %010100 +.db %001000 +.db %000000 +.db %000000 + +.db %000000 +.db %001000 +.db %010100 +.db %100010 +.db %010100 +.db %001000 +.db %000000 +.db %000000 + +; todo make a club +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %001000 +.db %011100 +.db %111110 +.db %001000 +.db %011100 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %001000 +.db %011100 +.db %001000 +.db %000000 +.db %000000 +.db %000000 + +.db %111110 +.db %111110 +.db %110110 +.db %100010 +.db %110110 +.db %111110 +.db %111110 +.db %000000 + +.db %000000 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 +.db %000000 + +.db %111110 +.db %100010 +.db %011100 +.db %011100 +.db %011100 +.db %100010 +.db %111110 +.db %000000 + +.db %000000 +.db %000010 +.db %011100 +.db %100100 +.db %100100 +.db %011000 +.db %000000 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %011100 +.db %001000 +.db %011100 +.db %001000 +.db %000000 + +.db %010000 +.db %011000 +.db %010110 +.db %010000 +.db %010000 +.db %110000 +.db %110000 +.db %000000 + +.db %000010 +.db %000110 +.db %001010 +.db %010010 +.db %010110 +.db %110110 +.db %110000 +.db %000000 + +.db %000000 +.db %001000 +.db %011100 +.db %110110 +.db %011100 +.db %001000 +.db %000000 +.db %000000 + +.db %100000 +.db %110000 +.db %111000 +.db %111100 +.db %111000 +.db %110000 +.db %100000 +.db %000000 + +.db %000010 +.db %000110 +.db %001110 +.db %011110 +.db %001110 +.db %000110 +.db %000010 +.db %000000 + +.db %001000 +.db %011100 +.db %101010 +.db %001000 +.db %101010 +.db %011100 +.db %001000 +.db %000000 + +.db %110110 +.db %110110 +.db %110110 +.db %110110 +.db %000000 +.db %110110 +.db %110110 +.db %000000 + +.db %011110 +.db %111010 +.db %111010 +.db %011010 +.db %001010 +.db %001010 +.db %001010 +.db %000000 + +.db %011100 +.db %100000 +.db %011000 +.db %100100 +.db %011000 +.db %000100 +.db %111000 +.db %000000 + +.db %000000 +.db %000000 +.db %111110 +.db %111110 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +; todo make arrow thing +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %011100 +.db %101010 +.db %001000 +.db %001000 +.db %001000 +.db %000000 +.db %000000 + +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %101010 +.db %011100 +.db %001000 +.db %000000 + +.db %000000 +.db %001000 +.db %000100 +.db %111110 +.db %000100 +.db %001000 +.db %000000 +.db %000000 + +.db %000000 +.db %001000 +.db %010000 +.db %111110 +.db %010000 +.db %001000 +.db %000000 +.db %000000 + +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %111111 + +; todo make double horiz arrow +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %001000 +.db %001000 +.db %011100 +.db %011100 +.db %111110 +.db %111110 +.db %000000 + +.db %111110 +.db %111110 +.db %011100 +.db %011100 +.db %001000 +.db %001000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %011000 +.db %011000 +.db %011000 +.db %011000 +.db %000000 +.db %011000 +.db %011000 +.db %000000 + +.db %010100 +.db %010100 +.db %010100 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %010100 +.db %010100 +.db %111110 +.db %010100 +.db %111110 +.db %010100 +.db %010100 +.db %000000 + +.db %001000 +.db %011100 +.db %101000 +.db %011100 +.db %001010 +.db %011100 +.db %001000 +.db %000000 + +.db %011000 +.db %011000 +.db %000010 +.db %011100 +.db %100000 +.db %001100 +.db %001100 +.db %000000 + +.db %011000 +.db %100100 +.db %101000 +.db %010000 +.db %101010 +.db %100100 +.db %011010 +.db %000000 + +.db %001000 +.db %001000 +.db %001000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %010000 +.db %010000 +.db %010000 +.db %010000 +.db %010000 +.db %001000 +.db %000000 + +.db %001000 +.db %000100 +.db %000100 +.db %000100 +.db %000100 +.db %000100 +.db %001000 +.db %000000 + +.db %010100 +.db %001000 +.db %010100 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %001000 +.db %001000 +.db %111110 +.db %001000 +.db %001000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %001000 +.db %001000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %011100 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %011000 +.db %011000 +.db %000000 + +.db %000000 +.db %000010 +.db %000100 +.db %001000 +.db %010000 +.db %100000 +.db %000000 +.db %000000 + +.db %011100 +.db %100010 +.db %100110 +.db %101010 +.db %110010 +.db %100010 +.db %011100 +.db %000000 + +.db %001000 +.db %011000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %011100 +.db %000000 + +.db %011100 +.db %100010 +.db %000010 +.db %000100 +.db %001000 +.db %010000 +.db %111110 +.db %000000 + +.db %011100 +.db %100010 +.db %000010 +.db %001100 +.db %000010 +.db %100010 +.db %011100 +.db %000000 + +.db %000100 +.db %001100 +.db %010100 +.db %100100 +.db %111110 +.db %000100 +.db %000100 +.db %000000 + +.db %111110 +.db %100000 +.db %111100 +.db %000010 +.db %000010 +.db %100010 +.db %011100 +.db %000000 + +.db %001100 +.db %010000 +.db %100000 +.db %111100 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %111110 +.db %000010 +.db %000100 +.db %001000 +.db %010000 +.db %010000 +.db %010000 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %011100 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011110 +.db %000010 +.db %000100 +.db %011000 + +.db %000000 +.db %011000 +.db %011000 +.db %000000 +.db %011000 +.db %011000 +.db %000000 +.db %000000 + +.db %000000 +.db %011000 +.db %011000 +.db %000000 +.db %011000 +.db %001000 +.db %010000 +.db %000000 + +.db %000100 +.db %001000 +.db %010000 +.db %100000 +.db %010000 +.db %001000 +.db %000100 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %000000 +.db %011100 +.db %000000 +.db %000000 +.db %000000 + +.db %010000 +.db %001000 +.db %000100 +.db %000010 +.db %000100 +.db %001000 +.db %010000 +.db %000000 + +.db %001100 +.db %010010 +.db %010010 +.db %000100 +.db %001000 +.db %000000 +.db %001000 +.db %000000 + +.db %011100 +.db %100010 +.db %101110 +.db %101010 +.db %101110 +.db %100000 +.db %011100 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %111110 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %111100 +.db %100010 +.db %100010 +.db %111100 +.db %100010 +.db %100010 +.db %111100 +.db %000000 + +.db %011100 +.db %100010 +.db %100000 +.db %100000 +.db %100000 +.db %100010 +.db %011100 +.db %000000 + +.db %111100 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %111100 +.db %000000 + +.db %111110 +.db %100000 +.db %100000 +.db %111000 +.db %100000 +.db %100000 +.db %111110 +.db %000000 + +.db %111110 +.db %100000 +.db %100000 +.db %111000 +.db %100000 +.db %100000 +.db %100000 +.db %000000 + +.db %011100 +.db %100010 +.db %100000 +.db %101110 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %100010 +.db %100010 +.db %100010 +.db %111110 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %111110 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %111110 +.db %000000 + +.db %001110 +.db %000100 +.db %000100 +.db %000100 +.db %100100 +.db %100100 +.db %011000 +.db %000000 + +.db %100010 +.db %100100 +.db %101000 +.db %110000 +.db %101000 +.db %100100 +.db %100010 +.db %000000 + +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %100000 +.db %111110 +.db %000000 + +.db %100010 +.db %110110 +.db %101010 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %100010 +.db %110010 +.db %101010 +.db %100110 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %111100 +.db %100010 +.db %100010 +.db %111100 +.db %100000 +.db %100000 +.db %100000 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %101010 +.db %100100 +.db %011010 +.db %000000 + +.db %111100 +.db %100010 +.db %100010 +.db %111100 +.db %101000 +.db %100100 +.db %100010 +.db %000000 + +.db %011100 +.db %100010 +.db %100000 +.db %011100 +.db %000010 +.db %100010 +.db %011100 +.db %000000 + +.db %111110 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %000000 + +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %100010 +.db %100010 +.db %100010 +.db %010100 +.db %010100 +.db %001000 +.db %001000 +.db %000000 + +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %101010 +.db %101010 +.db %010100 +.db %000000 + +.db %100010 +.db %100010 +.db %010100 +.db %001000 +.db %010100 +.db %100010 +.db %100010 +.db %000000 + +.db %100010 +.db %100010 +.db %010100 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %000000 + +.db %111110 +.db %000010 +.db %000100 +.db %001000 +.db %010000 +.db %100000 +.db %111110 +.db %000000 + +.db %011000 +.db %010000 +.db %010000 +.db %010000 +.db %010000 +.db %010000 +.db %011000 +.db %000000 + +.db %000000 +.db %100000 +.db %010000 +.db %001000 +.db %000100 +.db %000010 +.db %000000 +.db %000000 + +.db %001100 +.db %000100 +.db %000100 +.db %000100 +.db %000100 +.db %000100 +.db %001100 +.db %000000 + +.db %001000 +.db %010100 +.db %100010 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %111110 +.db %000000 + +.db %010000 +.db %001000 +.db %000100 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %000010 +.db %011110 +.db %100010 +.db %011110 +.db %000000 + +.db %100000 +.db %100000 +.db %101100 +.db %110010 +.db %100010 +.db %100010 +.db %111100 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %100010 +.db %100000 +.db %100010 +.db %011100 +.db %000000 + +.db %000010 +.db %000010 +.db %011010 +.db %100110 +.db %100010 +.db %100010 +.db %011110 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %100010 +.db %111100 +.db %100000 +.db %011100 +.db %000000 + +.db %001100 +.db %010010 +.db %010000 +.db %111000 +.db %010000 +.db %010000 +.db %010000 +.db %000000 + +.db %000000 +.db %011110 +.db %100010 +.db %100010 +.db %011110 +.db %000010 +.db %000010 +.db %011100 + +.db %100000 +.db %101100 +.db %110010 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %000000 +.db %001000 +.db %000000 +.db %011000 +.db %001000 +.db %001000 +.db %011100 +.db %000000 + +.db %000100 +.db %000000 +.db %001100 +.db %000100 +.db %000100 +.db %100100 +.db %011000 +.db %000000 + +.db %100000 +.db %100000 +.db %100100 +.db %101000 +.db %110000 +.db %101000 +.db %100100 +.db %000000 + +.db %011000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %110100 +.db %101010 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %000000 +.db %000000 +.db %101100 +.db %110010 +.db %100010 +.db %100010 +.db %100010 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %111100 +.db %100010 +.db %111100 +.db %100000 +.db %100000 +.db %000000 + +.db %000000 +.db %000000 +.db %011010 +.db %100110 +.db %011110 +.db %000010 +.db %000010 +.db %000000 + +.db %000000 +.db %000000 +.db %101100 +.db %110010 +.db %100000 +.db %100000 +.db %100000 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %100000 +.db %011100 +.db %000010 +.db %111100 +.db %000000 + +.db %010000 +.db %010000 +.db %111000 +.db %010000 +.db %010000 +.db %010010 +.db %001100 +.db %000000 + +.db %000000 +.db %000000 +.db %100010 +.db %100010 +.db %100010 +.db %100110 +.db %011010 +.db %000000 + +.db %000000 +.db %000000 +.db %100010 +.db %100010 +.db %100010 +.db %010100 +.db %001000 +.db %000000 + +.db %000000 +.db %000000 +.db %100010 +.db %100010 +.db %101010 +.db %101010 +.db %010100 +.db %000000 + +.db %000000 +.db %000000 +.db %100010 +.db %010100 +.db %001000 +.db %010100 +.db %100010 +.db %000000 + +.db %000000 +.db %000000 +.db %100010 +.db %100010 +.db %011110 +.db %000010 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %111110 +.db %000100 +.db %001000 +.db %010000 +.db %111110 +.db %000000 + +.db %000100 +.db %001000 +.db %001000 +.db %010000 +.db %001000 +.db %001000 +.db %000100 +.db %000000 + +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %000000 + +.db %010000 +.db %001000 +.db %001000 +.db %000100 +.db %001000 +.db %001000 +.db %010000 +.db %000000 + +.db %000000 +.db %000000 +.db %010000 +.db %101010 +.db %000100 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %010100 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %111110 +.db %000000 + +.db %011100 +.db %100010 +.db %100000 +.db %100000 +.db %100010 +.db %011100 +.db %001000 +.db %011000 + +.db %010100 +.db %000000 +.db %100010 +.db %100010 +.db %100010 +.db %100110 +.db %011010 +.db %000000 + +.db %000100 +.db %001000 +.db %011100 +.db %100010 +.db %111110 +.db %100000 +.db %011110 +.db %000000 + +.db %011100 +.db %100010 +.db %011100 +.db %000010 +.db %011110 +.db %100010 +.db %011110 +.db %000000 + +.db %010100 +.db %000000 +.db %011100 +.db %000010 +.db %011110 +.db %100010 +.db %011110 +.db %000000 + +.db %010000 +.db %001000 +.db %011100 +.db %000010 +.db %011110 +.db %100010 +.db %011110 +.db %000000 + +.db %001000 +.db %000000 +.db %011100 +.db %000010 +.db %011110 +.db %100010 +.db %011110 +.db %000000 + +.db %000000 +.db %001110 +.db %010000 +.db %010000 +.db %010000 +.db %001110 +.db %000100 +.db %001100 + +.db %011100 +.db %100010 +.db %011100 +.db %100010 +.db %111110 +.db %100000 +.db %011100 +.db %000000 + +.db %010100 +.db %000000 +.db %011100 +.db %100010 +.db %111110 +.db %100000 +.db %011100 +.db %000000 + +.db %010000 +.db %001000 +.db %011100 +.db %100010 +.db %111110 +.db %100000 +.db %011100 +.db %000000 + +.db %010100 +.db %000000 +.db %001000 +.db %000000 +.db %011000 +.db %001000 +.db %011100 +.db %000000 + +.db %011100 +.db %100010 +.db %001000 +.db %000000 +.db %011000 +.db %001000 +.db %011100 +.db %000000 + +.db %000000 +.db %010000 +.db %001000 +.db %000000 +.db %011000 +.db %001000 +.db %011100 +.db %000000 + +.db %010100 +.db %000000 +.db %011100 +.db %100010 +.db %111110 +.db %100010 +.db %100010 +.db %000000 + +.db %001000 +.db %000000 +.db %011100 +.db %100010 +.db %111110 +.db %100010 +.db %100010 +.db %000000 + +.db %000100 +.db %001000 +.db %011100 +.db %010000 +.db %011000 +.db %010000 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %010110 +.db %101110 +.db %101000 +.db %011110 +.db %000000 + +.db %010110 +.db %101000 +.db %101000 +.db %111100 +.db %101000 +.db %101000 +.db %101110 +.db %000000 + +.db %011100 +.db %100010 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %010100 +.db %000000 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %010000 +.db %001000 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %001000 +.db %010100 +.db %000000 +.db %100010 +.db %100010 +.db %100110 +.db %011010 +.db %000000 + +.db %010000 +.db %001000 +.db %100010 +.db %100010 +.db %100010 +.db %100110 +.db %011010 +.db %000000 + +.db %010100 +.db %000000 +.db %100010 +.db %100010 +.db %100010 +.db %011110 +.db %000010 +.db %011100 + +.db %010100 +.db %000000 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %010100 +.db %000000 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %000000 +.db %001000 +.db %011110 +.db %100000 +.db %100010 +.db %011100 +.db %001000 +.db %000000 + +.db %001000 +.db %010100 +.db %010000 +.db %111000 +.db %010000 +.db %010010 +.db %101100 +.db %000000 + +.db %100010 +.db %010100 +.db %001000 +.db %011100 +.db %001000 +.db %011100 +.db %001000 +.db %000000 + +.db %111100 +.db %100100 +.db %100100 +.db %111111 +.db %101010 +.db %111111 +.db %101001 +.db %101111 + +.db %000100 +.db %001010 +.db %001000 +.db %011100 +.db %001000 +.db %101000 +.db %010000 +.db %000000 + +.db %000100 +.db %001000 +.db %011100 +.db %000010 +.db %011110 +.db %100010 +.db %011110 +.db %000000 + +.db %000000 +.db %000100 +.db %001000 +.db %000000 +.db %011000 +.db %001000 +.db %011100 +.db %000000 + +.db %000100 +.db %001000 +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %000100 +.db %001000 +.db %100010 +.db %100010 +.db %100010 +.db %100110 +.db %011010 +.db %000000 + +.db %010100 +.db %001010 +.db %000000 +.db %101100 +.db %110010 +.db %100010 +.db %100010 +.db %000000 + +.db %010100 +.db %001010 +.db %000000 +.db %010010 +.db %011010 +.db %010110 +.db %010010 +.db %000000 + +.db %000110 +.db %000010 +.db %000110 +.db %000110 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000100 +.db %001010 +.db %000100 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %000000 +.db %001000 +.db %001000 +.db %010000 +.db %010010 +.db %001100 +.db %000000 + +.db %000000 +.db %000000 +.db %111110 +.db %100000 +.db %100000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %111110 +.db %000010 +.db %000010 +.db %000000 +.db %000000 +.db %000000 + +.db %100000 +.db %100100 +.db %101000 +.db %010100 +.db %101010 +.db %000100 +.db %001110 +.db %000000 + +.db %100000 +.db %100100 +.db %101000 +.db %010000 +.db %101010 +.db %001110 +.db %000010 +.db %000000 + +.db %000000 +.db %000000 +.db %001000 +.db %000000 +.db %001000 +.db %001000 +.db %001000 +.db %000000 + +.db %000000 +.db %001010 +.db %010100 +.db %101000 +.db %010100 +.db %001010 +.db %000000 +.db %000000 + +.db %000000 +.db %101000 +.db %010100 +.db %001010 +.db %010100 +.db %101000 +.db %000000 +.db %000000 + +.db %010101 +.db %000000 +.db %101010 +.db %000000 +.db %010101 +.db %000000 +.db %101010 +.db %000000 + +.db %101010 +.db %010101 +.db %101010 +.db %010101 +.db %101010 +.db %010101 +.db %101010 +.db %010101 + +.db %101010 +.db %111111 +.db %010101 +.db %111111 +.db %101010 +.db %111111 +.db %010101 +.db %111111 + +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %001000 +.db %111000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %111000 +.db %001000 +.db %111000 +.db %001000 +.db %001000 +.db %001000 + +.db %001010 +.db %001010 +.db %001010 +.db %111010 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %000000 +.db %000000 +.db %000000 +.db %111110 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %000000 +.db %000000 +.db %111000 +.db %001000 +.db %111000 +.db %001000 +.db %001000 +.db %001000 + +.db %001010 +.db %001010 +.db %111010 +.db %000010 +.db %111010 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %001010 +.db %001010 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %000000 +.db %000000 +.db %111110 +.db %000010 +.db %111010 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %111010 +.db %000010 +.db %111110 +.db %000000 +.db %000000 +.db %000000 + +.db %001010 +.db %001010 +.db %001010 +.db %111110 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %001000 +.db %111000 +.db %001000 +.db %111000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %111000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %001000 +.db %001111 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %001000 +.db %001000 +.db %111111 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %111111 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %001000 +.db %001111 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %000000 +.db %000000 +.db %000000 +.db %111111 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %001000 +.db %001000 +.db %111111 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %001111 +.db %001000 +.db %001111 +.db %001000 +.db %001000 +.db %001000 + +.db %001010 +.db %001010 +.db %001010 +.db %001011 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %001011 +.db %001000 +.db %001111 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %001111 +.db %001000 +.db %001011 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %111011 +.db %000000 +.db %111111 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %111111 +.db %000000 +.db %111011 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %001011 +.db %001000 +.db %001011 +.db %001010 +.db %001010 +.db %001010 + +.db %000000 +.db %000000 +.db %111111 +.db %000000 +.db %111111 +.db %000000 +.db %000000 +.db %000000 + +.db %001010 +.db %001010 +.db %111011 +.db %000000 +.db %111011 +.db %001010 +.db %001010 +.db %001010 + +.db %001000 +.db %001000 +.db %111111 +.db %000000 +.db %111111 +.db %000000 +.db %000000 +.db %000000 + +.db %001010 +.db %001010 +.db %001010 +.db %111111 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %111111 +.db %000000 +.db %111111 +.db %001000 +.db %001000 +.db %001000 + +.db %000000 +.db %000000 +.db %000000 +.db %111111 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %001010 +.db %001111 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %001000 +.db %001000 +.db %001111 +.db %001000 +.db %001111 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %001111 +.db %001000 +.db %001111 +.db %001000 +.db %001000 +.db %001000 + +.db %000000 +.db %000000 +.db %000000 +.db %001111 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %001010 +.db %001010 +.db %001010 +.db %111111 +.db %001010 +.db %001010 +.db %001010 +.db %001010 + +.db %001000 +.db %001000 +.db %111111 +.db %001000 +.db %111111 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %001000 +.db %111000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %001111 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db $ff +.db $ff +.db $ff +.db $ff +.db $ff +.db $ff +.db $ff +.db $ff + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db $ff +.db $ff +.db $ff +.db $ff + +.db %111000 +.db %111000 +.db %111000 +.db %111000 +.db %111000 +.db %111000 +.db %111000 +.db %111000 + +.db %000111 +.db %000111 +.db %000111 +.db %000111 +.db %000111 +.db %000111 +.db %000111 +.db %000111 + +.db $ff +.db $ff +.db $ff +.db $ff +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %011010 +.db %100100 +.db %100101 +.db %011010 +.db %000000 +.db %000000 + +.db %001100 +.db %010010 +.db %010010 +.db %010100 +.db %010010 +.db %010010 +.db %101100 +.db %000000 + +.db %000000 +.db %011110 +.db %010010 +.db %010000 +.db %010000 +.db %010000 +.db %111000 +.db %000000 + +.db %000000 +.db %000000 +.db %111110 +.db %010100 +.db %010100 +.db %010100 +.db %100100 +.db %000000 + +.db %111110 +.db %100010 +.db %010000 +.db %001000 +.db %010000 +.db %100010 +.db %111110 +.db %000000 + +.db %000000 +.db %000000 +.db %011111 +.db %100010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %100010 +.db %100010 +.db %100010 +.db %100110 +.db %111010 +.db %100000 + +.db %000000 +.db %000000 +.db %011110 +.db %101000 +.db %001000 +.db %001010 +.db %000100 +.db %000000 + +.db %011100 +.db %001000 +.db %011100 +.db %101010 +.db %011100 +.db %001000 +.db %011100 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %101010 +.db %100010 +.db %100010 +.db %011100 +.db %000000 + +.db %011100 +.db %100010 +.db %100010 +.db %100010 +.db %100010 +.db %010100 +.db %110110 +.db %000000 + +.db %000000 +.db %001100 +.db %010010 +.db %001000 +.db %011100 +.db %100010 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %010100 +.db %101010 +.db %101010 +.db %010100 +.db %000000 +.db %000000 + +.db %001000 +.db %001000 +.db %011100 +.db %101010 +.db %011100 +.db %001000 +.db %001000 +.db %000000 + +.db %000000 +.db %011100 +.db %100000 +.db %011100 +.db %100000 +.db %100010 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %001100 +.db %010010 +.db %100001 +.db %100001 +.db %000000 + +.db %000000 +.db %000000 +.db %011100 +.db %000000 +.db %011100 +.db %000000 +.db %011100 +.db %000000 + +.db %000000 +.db %000000 +.db %001000 +.db %011100 +.db %001000 +.db %011100 +.db %000000 +.db %000000 + +.db %110000 +.db %001100 +.db %000010 +.db %001100 +.db %110000 +.db %000000 +.db %111110 +.db %000000 + +.db %000110 +.db %011000 +.db %100000 +.db %011000 +.db %000110 +.db %000000 +.db %111110 +.db %000000 + +.db %000000 +.db %000100 +.db %001010 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 + +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %001000 +.db %101000 +.db %010000 +.db %000000 + +.db %000000 +.db %001000 +.db %000000 +.db %011100 +.db %000000 +.db %001000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %011000 +.db %100110 +.db %011000 +.db %100110 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %001000 +.db %010100 +.db %001000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %001000 +.db %000000 + +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 +.db %001000 +.db %000000 + +.db %001110 +.db %001000 +.db %001000 +.db %001000 +.db %101000 +.db %011000 +.db %001000 +.db %000000 + +.db %011110 +.db %100001 +.db %101101 +.db %101001 +.db %101101 +.db %100001 +.db %011110 +.db %000000 + +.db %010000 +.db %101000 +.db %010000 +.db %111000 +.db %000000 +.db %000000 +.db %000000 +.db %000000 + +.db %000000 +.db %000000 +.db $ff +.db $ff +.db $ff +.db $ff +.db %000000 +.db %000000 + +.db %000000 +.db %010000 +.db %001000 +.db %000100 +.db %001000 +.db %010000 +.db %000000 +.db %000000 \ No newline at end of file diff --git a/src/00/cls.z80 b/src/00/cls.z80 new file mode 100644 index 0000000..2904753 --- /dev/null +++ b/src/00/cls.z80 @@ -0,0 +1,11 @@ +ClearStart: +.db $BB +.dw EndClear-Clear +.db "cls.exe", 0 +.fill (ClearStart + 24)-$ + +.org $D000 +Clear: + call ClearScreen + ret +EndClear: \ No newline at end of file diff --git a/src/00/cp.z80 b/src/00/cp.z80 new file mode 100644 index 0000000..83513dc --- /dev/null +++ b/src/00/cp.z80 @@ -0,0 +1,10 @@ +CopyStart: +.db $BB +.dw EndOfCopy-Copy +.db "cp.exe", 0 +.fill (CopyStart + 24)-$ + +.org $D000 +Copy: + ret +EndOfCopy: \ No newline at end of file diff --git a/src/00/dir.z80 b/src/00/dir.z80 new file mode 100644 index 0000000..15f2f45 --- /dev/null +++ b/src/00/dir.z80 @@ -0,0 +1,49 @@ +DirectoryListingStart: +.db $BB +.dw EndOfDirectoryListing-DirectoryListing +.db "dir.exe", 0 +.fill (DirectoryListingStart + 24)-$ + +.org $D000 + +DirectoryListing: + ld hl, SYSPROG +DirectoryListingLoop: + ld a, (hl) + cp $BB + jp nz, DirectoryListingLoopContinue + push hl + ld hl, tmpbuf + ld b, 21 + ld d, 0 +DirectoryListingClearLoop: + ld (hl), d + inc hl + djnz DirectoryListingClearLoop + pop hl + inc hl \ ld e, (hl) + inc hl \ ld d, (hl) + inc hl + push de + push hl + ld de, tmpbuf + call strcpy + ld a, 10 + dec de + ld (de), a + ld hl, tmpbuf + call PrintString + pop hl + pop de + adc hl, de +DirectoryListingLoopContinue: + xor a + or h + or l + inc hl + cp $80 + jp nz, DirectoryListingLoop + ret +tmpbuf: +.block 21 +EndOfDirectoryListing: \ No newline at end of file diff --git a/src/00/display.z80 b/src/00/display.z80 new file mode 100644 index 0000000..1b81ae3 --- /dev/null +++ b/src/00/display.z80 @@ -0,0 +1,262 @@ +WaitForLCD: + push af +_wfl_loop: + in a, ($10) + bit 7, a + jp nz, _wfl_loop + pop af + ret + +; clears the screen buffer +; no inputs, no outputs +ClearScreen: + call ClearScreenBuffer + call DrawScreenBuffer + ret + +ClearScreenBuffer: + di + ld hl, SCREENBLOCK + ld (SCREENPTR), hl + ld (CLOCK+4), sp + ld sp, SCREENBLOCK+(16*8) + ld hl, $0000 + ld b, 64 +csbloop: + push hl + djnz csbloop + ld sp, (CLOCK+4) + + ld a, $80 + out ($10), a + call WaitForLCD + ld a, $20 + out ($10), a + call WaitForLCD + + ei + ret + +; prints string specified by hl, then breaks the line +; inputs: +; hl: string ptr +PrintLine: + call PrintString + + ld a, 10 \ ld ($8400), a + xor a \ ld ($8401), a + + ld hl, $8400 + call PrintString + ret + +; toggles cursor +ToggleCursor: + ld hl, (SCREENPTR) + push de + ld de, SCREENBLOCK + ccf + sbc hl, de + inc hl + pop de + ld d, 16 + call DivideHLD + ld c, a + + push bc + push hl + pop de + ld a, 8 + call MultiplyDEA + push hl + pop de + pop bc + + ld a, $80 + add a, e + out ($10), a + call WaitForLCD + + ld a, $20 + add a, c + out ($10), a + call WaitForLCD + + ld a, ($8AED) + cp 1 + jp nz, _ + ld hl, cursor + ld b, 8 +tconloop: + ld a, (hl) + out ($11), a + call WaitForLCD + inc hl + djnz tconloop + + ld a, 0 + ld ($8AED), a + ret +_: + ld hl, cursorblank + ld b, 8 +tcoffloop: + ld a, (hl) + out ($11), a + call WaitForLCD + inc hl + djnz tcoffloop + + ld a, 1 + ld ($8AED), a + ret +cursor: + .db %111110 + .db %111110 + .db %111110 + .db %111110 + .db %111110 + .db %111110 + .db %111110 + .db %000000 +cursorblank: + .db 0 + .db 0 + .db 0 + .db 0 + .db 0 + .db 0 + .db 0 + .db 0 + .db 0 + +; prints a single character +; inputs: +; a: character +PrintChar: + ld ($8400), a + xor a \ ld ($8401), a + + ld hl, $8400 + call PrintString + ret + +; prints string to current cursor position +; inputs: +; hl: string ptr +PrintString: + ld bc, (SCREENPTR) +psloop: + ld a, c + cp 128 + jp z, psloadnewline + ld a, (hl) + cp 0 + jp z, psexitloop + cp 10 + jp z, pslinebreak + ld (bc), a + inc hl + inc bc + ld (SCREENPTR), bc + jp psloop +psloadnewline: + push hl + + ld hl, SCREENBLOCK+16 + ld de, SCREENBLOCK + ld bc, 16*7 + ldir + + ld hl, SCREENBLOCK+(16*7) + ld b, 16 + ld a, $00 +psloadnewlineloop: + ld (hl), a + inc hl + djnz psloadnewlineloop + + ld bc, SCREENBLOCK+(16*7) + ld (SCREENPTR), bc + + pop hl + jp psloop +pslinebreak: + ld a, c + cp 16 + jp z, pslbexitloop + cp 32 + jp z, pslbexitloop + cp 48 + jp z, pslbexitloop + cp 64 + jp z, pslbexitloop + cp 80 + jp z, pslbexitloop + cp 96 + jp z, pslbexitloop + cp 112 + jp z, pslbexitloop + cp 128 + jp z, pslbexitloop + inc bc + ld (SCREENPTR), bc + jp pslinebreak +pslbexitloop: + inc hl + jp psloop +psexitloop: + call DrawScreenBuffer + ret + +DrawScreenBuffer: + di + ld c, 0 +dsbreprow: + ld a, $80 + out ($10), a + call WaitForLCD + ld a, $20 + add a, c + out ($10), a + call WaitForLCD + + ld hl, SCREENBLOCK + ld b, 0 + add hl, bc + ld b, 8 +dsbwriterow: + push hl + push af + push bc + push de + + ld d, 0 + ld e, (hl) + ld a, 8 + call MultiplyDEA + ld bc, characterIndex + add hl, bc + + ld b, 8 +_dsblooper: + ld a, (hl) + out ($11), a + call WaitForLCD + inc hl + djnz _dsblooper + + pop de + pop bc + pop af + pop hl + + ld de, 16 + add hl, de + djnz dsbwriterow + inc c + ld a, c + cp 16 + jp nz, dsbreprow + ei + ret \ No newline at end of file diff --git a/src/00/filesystem.z80 b/src/00/filesystem.z80 new file mode 100644 index 0000000..47bfd23 --- /dev/null +++ b/src/00/filesystem.z80 @@ -0,0 +1,166 @@ +; loads a program from ROM into memory +; inputs: +; hl: file pointer +LoadProgram: + ld de, 23 + ccf + sbc hl, de + ld a, (hl) + cp $BB + jp nz, LoadProgramError + inc hl \ ld e, (hl) + inc hl \ ld d, (hl) + ld bc, 21 + ccf + adc hl, bc + ld bc, PROGRAMRESERVE +LoadProgramLoop: + ld a, (hl) + ld (bc), a + inc bc \ inc hl \ dec de + ld a, 0 + or d + or e + cp 0 + jp nz, LoadProgramLoop +LoadProgramError: + ret + +; gets file pointer from file name +; inputs: +; hl: string ptr to file name +; outputs: +; hl: file ptr +; special conditions: +; hl is 0 when file is not found +FindFile: + ld de, SYSPROG + ld ($8300), hl +feloop: + ld a, (de) + cp $BB + jp nz, fecheckskip + + push de + inc de \ ld a, (de) \ ld c, a + inc de \ ld a, (de) \ ld b, a + inc de +festrcmp: + ld a, (de) + cp (hl) + jp z, fecheckifmatching + pop de + push hl + push de + pop hl + ccf + adc hl, bc + ld bc, 23 + ccf + adc hl, bc + dec hl + push hl + pop de + pop hl + ld hl, ($8300) + jp feloop +fecheckifmatching: + cp 0 + inc de \ inc hl + jp nz, festrcmp + pop hl + ld bc, 23 + ccf + adc hl, bc + ret +fecheckskip: + inc de + push hl + ld hl, $7fff + ccf + sbc hl, de + inc hl + xor a + or h + or l + cp 0 + pop hl + jp nz, feloop + ld hl, 0 + ret + +; writes a buffer to flash memory +; inputs: +; de: location of buffer +; hl: location to write to +; bc: size of buffer +WriteFlashBuffer: + di + call LoadFlashWriterToRAM +wfbloop: + ld a, (de) + + push af + push bc + push de + call $8500 + pop de + pop bc + pop af + + inc hl + inc de + dec bc + ld a, 0 + or b + or c + cp 0 + jp nz, wfbloop + ei + ret + +; writes a byte to flash memory +; inputs: +; hl: location to write +; a: byte to write +WriteFlashByte: + di + call LoadFlashWriterToRAM + call $8500 + ei + ret + +LoadFlashWriterToRAM: + push hl + push bc + push de + ld hl, WriteFlashByteRAM + ld de, $8500 + ld bc, WriteFlashByteRAMEnd-WriteFlashByteRAM + ldir + pop de + pop bc + pop hl + ret + +WriteFlashByteRAM: + and (hl) + ld b, a + ld a, $AA + ld ($0AAA), a + ld a, $55 + ld ($0555), a + ld a, $A0 + ld ($0AAA), a + ld (hl), b +_: + ld a, b + xor (hl) + bit 7, a + jr z, WriteFlashByteRAMDone + bit 5, (hl) + jr z, -_ +WriteFlashByteRAMDone: + ld (hl), $F0 + ret +WriteFlashByteRAMEnd: \ No newline at end of file diff --git a/src/00/header.z80 b/src/00/header.z80 new file mode 100644 index 0000000..d8c513f --- /dev/null +++ b/src/00/header.z80 @@ -0,0 +1,36 @@ +bootcode: + jp boot + + .db "SK" ; magic number + + .db $00 ; major ver + .db $01 ; minor ver + + .db $00 ; calculator metadata, ignore for now + + ret ; rst $08 + +.fill $10-$ + ret ; rst $10 + +.fill $18-$ + ret ; rst $18 + +.fill $20-$ + ret ; rst $20 + +.fill $28-$ + ret ; rst $28 + +.fill $30-$ + ret ; rst $30 + +.fill $38-$ + jp sysInt ; rst $38 + +.fill $53-$ + jp boot + .db $FF, $A5, $FF + +boot: + jp kernel \ No newline at end of file diff --git a/src/00/interrupts.z80 b/src/00/interrupts.z80 new file mode 100644 index 0000000..ccc1408 --- /dev/null +++ b/src/00/interrupts.z80 @@ -0,0 +1,91 @@ +sysInt: + di + exx + ex af, af' + in a, (4) + + bit 0, a + jp nz, handleOn + + bit 1, a + jp nz, handleTimer1 + + bit 2, a + jp nz, handleTimer2 + + bit 4, a + jp nz, handleLink + + ;jp sysIntDone + ex af, af' + exx + ei + jp boot +handleOn: + ; ack int + in a, (3) + res 0, a + out (3), a + set 0, a + out (3), a + + jp sysIntDone +handleTimer1: + ; ack int + in a, (3) + res 1, a + out (3), a + set 1, a + out (3), a + + ld a, (CLOCK) + cp 0 + jp z, timer1IncTime + dec a + ld (CLOCK), a + + ld a, (CLOCK+10) + cp 50 + call z, ToggleCursor + jp nz, _ + ld a, 0 + ld (CLOCK+10), a + jp sysIntDone + +_: inc a + ld (CLOCK+10), a + jp sysIntDone +timer1IncTime: + ;ld hl, string + ;call PrintString + + ld hl, (CLOCK+1) + inc hl + ld (CLOCK+1), hl + ld a, 118 + ld (CLOCK), a + jp sysIntDone +handleTimer2: + ; ack int + in a, (3) + res 2, a + out (3), a + set 2, a + out (3), a + + jp sysIntDone +handleLink: + ; ack int + in a, (3) + res 4, a + out (3), a + set 4, a + out (3), a + + ; int code +sysIntDone: + ex af, af' + exx + ei + ret + \ No newline at end of file diff --git a/src/00/kernel.z80 b/src/00/kernel.z80 new file mode 100644 index 0000000..113ada3 --- /dev/null +++ b/src/00/kernel.z80 @@ -0,0 +1,123 @@ +kernel: + call Sleep +kernelboot: + ; init + di + ld sp, $00 ; prep stack ptr + + ld a, 6 + out (4), a ; set memory mode 0 + ; memory layout: + ; $0000 - $3FFF : Page $00 ROM + ; $4000 - $7FFF : Page $00 - $1F ROM + ; Change this with SwapROMPage + ; $8000 - $BFFF : Page 1 RAM + ; $C000 - $FFFF : Page 0 RAM + + ld a, 1 + call SwapRAMPage ; load RAM page 1 + + ld a, PRIVPAGE + call SwapROMPage ; load privledged page into ROM + call $4001 ; unlock the flash + + ld a, $01 + call SwapROMPage + + call freeall + + ; init LCD + ld a, $00 + out ($10), a ; set to 6-bit mode + call WaitForLCD + + ld a, $05 + out ($10), a ; Y-increment + call WaitForLCD + + ld a, 118 + ld (CLOCK), a + ld hl, $0000 + ld (CLOCK+1), hl + ei + + ld a, $03 + out ($10), a ; enable screen + call WaitForLCD + + call ClearScreen + + ld hl, tidos + call PrintLine + + ld a, 10 + call PrintChar + + ld hl, 0 + ld ($8DDD), hl + + ; todo fix stack things i'm working on +cmd: + ld hl, 0 + ld sp, hl + + ld hl, caret + call PrintString + ld hl, $8600 + call getLine + + ld ($8CDB), hl + ld b, 255 + ld de, 0 +replaceloop: + ld a, (hl) + cp 32 + jp nz, _ + ld c, a + xor a + ld (hl), a + inc hl \ inc de + ;push hl + dec hl + ld a, c +_: cp 0 + jp z, replaceloopexit + inc hl + djnz replaceloop +replaceloopexit: + ;push de + ld hl, ($8CDB) + + ld de, $8900 + call strcpy + push de + pop hl + dec hl + ld (hl), '.' + inc hl \ ld (hl), 'e' + inc hl \ ld (hl), 'x' + inc hl \ ld (hl), 'e' + inc hl \ ld (hl), 0 + + ld hl, $8900 + call FindFile + + xor a + or h + or l + cp 0 + jp z, notfound + call LoadProgram + call $D000 + jp cmd +notfound: + ld hl, filenotfound + call PrintLine + jp cmd + +tidos: + .db "TI-DOS v0.1", 10, 252, " 2013 Malloc", 0 +caret: + .db 32, 10, 255, 0 +filenotfound: + .db "Bad cmd/file", 0 \ No newline at end of file diff --git a/src/00/keyboard.z80 b/src/00/keyboard.z80 new file mode 100644 index 0000000..2515c4b --- /dev/null +++ b/src/00/keyboard.z80 @@ -0,0 +1,568 @@ +#include "keydefs.z80" +;#define TOGGLE + +; gets a line from the user +; inputs: +; hl: string ptr +; outputs: +; hl: string ptr +getLine: + ld ($8ABA), hl +getLineLoop: + + ld bc, 20000 +feedbackLoop: + nop + dec bc + xor a + or b + or c + cp 0 + jp nz, feedbackLoop + + push hl + call getChar + pop hl + ld (hl), a + cp 0 + jp z, getLineLoop + cp 13 + jp z, getLineExit + cp 8 + jp z, getLineBackspace + push hl + call PrintChar + pop hl + inc hl + jp getLineLoop +getLineBackspace: + push hl + ld de, ($8ABA) + ccf + sbc hl, de + inc hl + xor a \ or h \ or l + cp 0 + pop hl + jp z, getLineLoop + dec hl + ld (hl), 0 + push hl + ld hl, (SCREENPTR) + dec hl + ld (SCREENPTR), hl + inc hl + ld (hl), 0 + + call DrawScreenBuffer + pop hl + jp getLineLoop +getLineExit: + ld (hl), 0 + ld a, 0 + ld hl, (SCREENPTR) + ld (hl), a + ld a, 10 + call PrintChar + ld hl, ($8ABA) + ret + +; gets a character representation of a key +; outputs: +; a: key (in ascii) +getChar: + xor a +waitForKeyPress: + call getKeyMatrix + + ld a, (KENTER) + cp 1 + jp nz, _ + ld a, 13 + ret +_: ld a, (KDEL) + cp 1 + jp nz, _ + ld a, 8 + ret +_: +#ifdef TOGGLE + ld a, (KALPHA) + cp 1 + jp z, numericTests + + ld a, (KSECOND) + cp 1 + jp z, capitalizedTests +#else + ld a, (KALPHA) + cp 1 + jp nz, _ + ld a, (NUMS) + xor 1 + ld (NUMS), a + ld a, 0 + ret +_: + + ld a, (KSECOND) + cp 1 + jp nz, _ + ld a, (CAPS) + xor 1 + ld (CAPS), a + ld a, 0 + ret +_: + + ld a, (NUMS) + cp 1 + jp z, numericTests + + ld a, (CAPS) + cp 1 + jp z, capitalizedTests +#endif + ld a, (KMATH) + cp 1 + jp nz, _ + ld a, 'a' + ret +_: ld a, (KAPPS) + cp 1 + jp nz, _ + ld a, 'b' + ret +_: ld a, (KPRGM) + cp 1 + jp nz, _ + ld a, 'c' + ret +_: ld a, (KINV) + cp 1 + jp nz, _ + ld a, 'd' + ret +_: ld a, (KSIN) + cp 1 + jp nz, _ + ld a, 'e' + ret +_: ld a, (KCOS) + cp 1 + jp nz, _ + ld a, 'f' + ret +_: ld a, (KTAN) + cp 1 + jp nz, _ + ld a, 'g' + ret +_: ld a, (KPOW) + cp 1 + jp nz, _ + ld a, 'h' + ret +_: ld a, (KSQR) + cp 1 + jp nz, _ + ld a, 'i' + ret +_: ld a, (KCOMMA) + cp 1 + jp nz, _ + ld a, 'j' + ret +_: ld a, (KLPAREN) + cp 1 + jp nz, _ + ld a, 'k' + ret +_: ld a, (KRPAREN) + cp 1 + jp nz, _ + ld a, 'l' + ret +_: ld a, (KDIV) + cp 1 + jp nz, _ + ld a, 'm' + ret +_: ld a, (KLOG) + cp 1 + jp nz, _ + ld a, 'n' + ret +_: ld a, (KSEVEN) + cp 1 + jp nz, _ + ld a, 'o' + ret +_: ld a, (KEIGHT) + cp 1 + jp nz, _ + ld a, 'p' + ret +_: ld a, (KNINE) + cp 1 + jp nz, _ + ld a, 'q' + ret +_: ld a, (KMULT) + cp 1 + jp nz, _ + ld a, 'r' + ret +_: ld a, (KLN) + cp 1 + jp nz, _ + ld a, 's' + ret +_: ld a, (KFOUR) + cp 1 + jp nz, _ + ld a, 't' + ret +_: ld a, (KFIVE) + cp 1 + jp nz, _ + ld a, 'u' + ret +_: ld a, (KSIX) + cp 1 + jp nz, _ + ld a, 'v' + ret +_: ld a, (KMINUS) + cp 1 + jp nz, _ + ld a, 'w' + ret +_: ld a, (KSTO) + cp 1 + jp nz, _ + ld a, 'x' + ret +_: ld a, (KONE) + cp 1 + jp nz, _ + ld a, 'y' + ret +_: ld a, (KTWO) + cp 1 + jp nz, _ + ld a, 'z' + ret +_: ld a, (KTHREE) + cp 1 + jp nz, _ + ld a, '~' + ret +_: ld a, (KPLUS) + cp 1 + jp nz, _ + ld a, '"' ;" + ret +_: ld a, (KZERO) + cp 1 + jp nz, _ + ld a, ' ' + ret +_: ld a, (KPERIOD) + cp 1 + jp nz, _ + ld a, '.' + ret +_: ld a, (KNEG) + cp 1 + jp nz, _ + ld a, '?' + ret +_: jp endTests +capitalizedTests: + ld a, (KMATH) + cp 1 + jp nz, _ + ld a, 'A' + ret +_: ld a, (KAPPS) + cp 1 + jp nz, _ + ld a, 'B' + ret +_: ld a, (KPRGM) + cp 1 + jp nz, _ + ld a, 'C' + ret +_: ld a, (KINV) + cp 1 + jp nz, _ + ld a, 'D' + ret +_: ld a, (KSIN) + cp 1 + jp nz, _ + ld a, 'E' + ret +_: ld a, (KCOS) + cp 1 + jp nz, _ + ld a, 'F' + ret +_: ld a, (KTAN) + cp 1 + jp nz, _ + ld a, 'G' + ret +_: ld a, (KPOW) + cp 1 + jp nz, _ + ld a, 'H' + ret +_: ld a, (KSQR) + cp 1 + jp nz, _ + ld a, 'I' + ret +_: ld a, (KCOMMA) + cp 1 + jp nz, _ + ld a, 'J' + ret +_: ld a, (KLPAREN) + cp 1 + jp nz, _ + ld a, 'K' + ret +_: ld a, (KRPAREN) + cp 1 + jp nz, _ + ld a, 'L' + ret +_: ld a, (KDIV) + cp 1 + jp nz, _ + ld a, 'M' + ret +_: ld a, (KLOG) + cp 1 + jp nz, _ + ld a, 'N' + ret +_: ld a, (KSEVEN) + cp 1 + jp nz, _ + ld a, 'O' + ret +_: ld a, (KEIGHT) + cp 1 + jp nz, _ + ld a, 'P' + ret +_: ld a, (KNINE) + cp 1 + jp nz, _ + ld a, 'Q' + ret +_: ld a, (KMULT) + cp 1 + jp nz, _ + ld a, 'R' + ret +_: ld a, (KLN) + cp 1 + jp nz, _ + ld a, 'S' + ret +_: ld a, (KFOUR) + cp 1 + jp nz, _ + ld a, 'T' + ret +_: ld a, (KFIVE) + cp 1 + jp nz, _ + ld a, 'U' + ret +_: ld a, (KSIX) + cp 1 + jp nz, _ + ld a, 'V' + ret +_: ld a, (KMINUS) + cp 1 + jp nz, _ + ld a, 'W' + ret +_: ld a, (KSTO) + cp 1 + jp nz, _ + ld a, 'X' + ret +_: ld a, (KONE) + cp 1 + jp nz, _ + ld a, 'Y' + ret +_: ld a, (KTWO) + cp 1 + jp nz, _ + ld a, 'Z' + ret +_: ld a, (KTHREE) + cp 1 + jp nz, _ + ld a, '~' + ret +_: ld a, (KPLUS) + cp 1 + jp nz, _ + ld a, '"' ;" + ret +_: ld a, (KZERO) + cp 1 + jp nz, _ + ld a, ' ' + ret +_: ld a, (KPERIOD) + cp 1 + jp nz, _ + ld a, '.' + ret +_: ld a, (KNEG) + cp 1 + jp nz, _ + ld a, '?' + ret +_: jp endTests +numericTests: + ld a, (KZERO) + cp 1 + jp nz, _ + ld a, '0' + ret +_: ld a, (KONE) + cp 1 + jp nz, _ + ld a, '1' + ret +_: ld a, (KTWO) + cp 1 + jp nz, _ + ld a, '2' + ret +_: ld a, (KTHREE) + cp 1 + jp nz, _ + ld a, '3' + ret +_: ld a, (KFOUR) + cp 1 + jp nz, _ + ld a, '4' + ret +_: ld a, (KFIVE) + cp 1 + jp nz, _ + ld a, '5' + ret +_: ld a, (KSIX) + cp 1 + jp nz, _ + ld a, '6' + ret +_: ld a, (KSEVEN) + cp 1 + jp nz, _ + ld a, '7' + ret +_: ld a, (KEIGHT) + cp 1 + jp nz, _ + ld a, '8' + ret +_: ld a, (KNINE) + cp 1 + jp nz, _ + ld a, '9' + ret +_: ld a, (KCOMMA) + cp 1 + jp nz, _ + ld a, ',' + ret +_: ld a, (KPERIOD) + cp 1 + jp nz, _ + ld a, ':' + ret +_: ld a, (KLPAREN) + cp 1 + jp nz, _ + ld a, '(' + ret +_: ld a, (KRPAREN) + cp 1 + jp nz, _ + ld a, ')' + ret +_: ld a, (KDIV) + cp 1 + jp nz, _ + ld a, '/' + ret +_: ld a, (KMULT) + cp 1 + jp nz, _ + ld a, '*' + ret +_: ld a, (KPLUS) + cp 1 + jp nz, _ + ld a, '+' + ret +_: ld a, (KMINUS) + cp 1 + jp nz, _ + ld a, '-' + ret +_: +endTests: + jp waitForKeyPress + ret + +getKeyMatrix: + ld hl, KEYBUF + ld a, $FE + ld b, 7 +gkmFetchLoop: + push af + ld a, $FF + out (1), a + nop \ nop \ nop \ nop + pop af + out (1), a + nop \ nop \ nop \ nop + push af + in a, (1) + ld d, a + pop af + push af + push bc + ld b, 8 +gkmAssignLoop: + ld a, d + and 1 + or %11111110 + neg + dec a + ld (hl), a + rrc d + inc hl + djnz gkmAssignLoop + pop bc + pop af + rlca + djnz gkmFetchLoop + ret \ No newline at end of file diff --git a/src/00/keydefs.z80 b/src/00/keydefs.z80 new file mode 100644 index 0000000..b4fa5d2 --- /dev/null +++ b/src/00/keydefs.z80 @@ -0,0 +1,55 @@ +#define KDOWN KEYBUF +#define KLEFT KEYBUF+1 +#define KRIGHT KEYBUF+2 +#define KUP KEYBUF+3 + +#define KENTER KEYBUF+8 +#define KPLUS KEYBUF+9 +#define KMINUS KEYBUF+10 +#define KMULT KEYBUF+11 +#define KDIV KEYBUF+12 +#define KPOW KEYBUF+13 +#define KCLEAR KEYBUF+14 + +#define KNEG KEYBUF+16 +#define KTHREE KEYBUF+17 +#define KSIX KEYBUF+18 +#define KNINE KEYBUF+19 +#define KRPAREN KEYBUF+20 +#define KTAN KEYBUF+21 +#define KVARS KEYBUF+22 + +#define KPERIOD KEYBUF+24 +#define KTWO KEYBUF+25 +#define KFIVE KEYBUF+26 +#define KEIGHT KEYBUF+27 +#define KLPAREN KEYBUF+28 +#define KCOS KEYBUF+29 +#define KPRGM KEYBUF+30 +#define KSTAT KEYBUF+31 + +#define KZERO KEYBUF+32 +#define KONE KEYBUF+33 +#define KFOUR KEYBUF+34 +#define KSEVEN KEYBUF+35 +#define KCOMMA KEYBUF+36 +#define KSIN KEYBUF+37 +#define KAPPS KEYBUF+38 +#define KXTTN KEYBUF+39 + +#define KSTO KEYBUF+41 +#define KLN KEYBUF+42 +#define KLOG KEYBUF+43 +#define KSQR KEYBUF+44 +#define KINV KEYBUF+45 +#define KMATH KEYBUF+46 +#define KALPHA KEYBUF+47 + +#define KGRAPH KEYBUF+48 +#define KTRACE KEYBUF+49 +#define KZOOM KEYBUF+50 +#define KWINDOW KEYBUF+51 +#define KFUNC KEYBUF+52 +#define KSECOND KEYBUF+53 +#define KMODE KEYBUF+54 +#define KDEL KEYBUF+55 \ No newline at end of file diff --git a/src/00/memory.z80 b/src/00/memory.z80 new file mode 100644 index 0000000..324af16 --- /dev/null +++ b/src/00/memory.z80 @@ -0,0 +1,140 @@ +; swaps out what ROM page should be loaded at $4000 +; inputs: +; a: ROM page from $00 to $1F +SwapROMPage: + out (6), a + ret + +; determines what ROM page is loaded at $4000 +; outputs: +; a: ROM page from $00 to $1F +GetROMPage: + in a, (6) + ret + +; swaps out what RAM page should be loaded at $8000 +; inputs: +; a: RAM page from $00 to $01 +SwapRAMPage: + or RAMMASK + out (7), a + ret + +; copies a block of memory to another block of memory +; input: +; hl: pointer to block being copied +; de: pointer to block copying to +; bc: size of block +memcpy: + ldir + ret + +; allocates a block of memory +; input: +; de: size in bytes +; output: +; hl: pointer to memory +; special conditions: +; hl is 0 when allocation fails +malloc: + di + ld hl, FREEMEM + inc de \ inc de \ inc de + ld bc, 0 +mallocloop: + push hl + push de + pop hl + ccf + sbc hl, bc + pop hl + jp z, mallocend + push bc + push hl + ld bc, PROGRAMRESERVE + ccf + sbc hl, bc + pop hl + pop bc + jp z, mallocfail + ld a, (hl) + cp $AA + jp z, mallocblockfound + inc hl + inc bc + jp mallocloop +mallocblockfound: + inc hl + ld bc, 0 + push de + ld e, (hl) + inc hl + ld d, (hl) + add hl, de + inc hl + pop de + jp mallocloop +mallocend: + ccf + sbc hl, de + inc hl + ld (hl), $AA + inc hl + dec de \ dec de \ dec de + ld (hl), e + inc hl + ld (hl), d + inc hl + ei + ret +mallocfail + ld hl, 0 + ei + ret + +; frees a block of memory +; input: +; hl: memory address +; todo rewrite this with ldir +free: + dec hl + ld d, (hl) + dec hl + ld e, (hl) + dec hl + ld a, (hl) + cp $AA + jp nz, freenotvalidblock + inc de \ inc de \ inc de + ld bc, 0 +freeloop: + ld (hl), 0 + inc hl + inc bc + push hl + push de + pop hl + ccf + sbc hl, bc + pop hl + jp nz, freeloop +freenotvalidblock: + ret + +; overwrites all freemem and progspace with zeroes +; no inputs, no outputs +; todo rewrite this with ldir +freeall: + di + ld hl, SYSRESERVE-1 + ld de, STACKRESERVE-2 +allfreeloop: + inc hl + ld (hl), 0 + push hl + sbc hl, de + pop hl + jp nz, allfreeloop + ei + ret + \ No newline at end of file diff --git a/src/00/shutdown.z80 b/src/00/shutdown.z80 new file mode 100644 index 0000000..c0644e0 --- /dev/null +++ b/src/00/shutdown.z80 @@ -0,0 +1,16 @@ +ShutdownStart: +.db $BB +.dw EndShutdown-Shutdown +.db "shutdown.exe", 0 +.fill (ShutdownStart + 24)-$ + +.org $D000 + +Shutdown: + ld a, $02 + out ($10), a ; disable screen + call WaitForLCD + + call Sleep + jp kernelboot +EndShutdown: \ No newline at end of file diff --git a/src/00/sleep.z80 b/src/00/sleep.z80 new file mode 100644 index 0000000..44a59a8 --- /dev/null +++ b/src/00/sleep.z80 @@ -0,0 +1,20 @@ +SleeperStart: +.db $BB +.dw EndSleep-Sleeper +.db "sleep.exe", 0 +.fill (SleeperStart + 24)-$ + +.org $D000 + +Sleeper: + ld a, $02 + out ($10), a ; disable screen + call WaitForLCD + + call Sleep + + ld a, $03 + out ($10), a ; enable screen + call WaitForLCD + ret +EndSleep: \ No newline at end of file diff --git a/src/00/utils.z80 b/src/00/utils.z80 new file mode 100644 index 0000000..a22182b --- /dev/null +++ b/src/00/utils.z80 @@ -0,0 +1,166 @@ +; puts calculator to sleep until on is pressed +Sleep: + ei + ld a, $11 + out (3), a + im 1 + halt + ld a, %00010111 + out (3), a + ret + +; puts calculator to sleep until on is pressed, +; then jumps to beginning of kernel + +; reverses a string +; inputs: +; hl: string ptr +; outputs: +; hl: string ptr +ReverseString: + ld bc, 0 + push hl + push hl +rslenloop: + ld a, (hl) + cp 0 + jp z, rsexitlenloop + inc bc + inc hl + jp rslenloop +rsexitlenloop: + dec hl + push hl + pop de + pop hl + + xor a \ or b \ or c + cp 0 + jp z, rsend + + dec bc + xor a \ or b \ or c + cp 0 + jp z, rsend + inc bc + + push de + push hl + push bc + pop hl + ld d, 2 + call DivideHLD + push hl + pop bc + pop hl + pop de +rsreverseloop: + push af + ld a, (hl) + ld ($8300), a + ld a, (de) + ld (hl), a + ld a, ($8300) + ld (de), a + pop af + + ld ($8302), a + dec de \ inc hl \ dec bc + xor a + or b + or c + cp 0 + ld a, ($8302) + jp nz, rsreverseloop +rsend: + pop hl + ret + +; converts a number to a string +; inputs: +; hl: number +; outputs: +; hl: string pointer +NumberToString: + push hl + ld de, 6 + call malloc + push hl + pop bc + pop hl + push bc + ld e, 0 +ntsloop: + ld d, 10 + push bc + call DivideHLD + pop bc + add a, '0' + ld (bc), a + inc bc + xor a + or h + or l + cp 0 + jp nz, ntsloop + ld a, 0 + ld (bc), a + pop hl + call ReverseString + ret + +; divides hl by d +; inputs: +; hl: divisor +; d: dividend +; outputs: +; hl: quotient +; a: remainder +DivideHLD: + xor a + ld b, 16 +_loop: + add hl, hl + rla + jr c, _overflow + cp d + jp c, _skip +_overflow: + sub d + inc l +_skip: + djnz _loop + ret + +; multiplies de by a and stores the result in hl +; inputs: +; de: multiplier +; a: multiplicand +MultiplyDEA: + push bc + ld hl, 0 + ld b, 8 +_loopMDE: + rrca + jr nc, _skipAdditionMDE + add hl, de +_skipAdditionMDE + sla e + rl d + djnz _loopMDE + pop bc + ret + +; copies null-terminated string from one place to another +; inputs: +; hl: location of string to be copied +; de: location to be copied to +strcpy: + ld a, (hl) + ld (de), a + inc hl + inc de + cp 0 + jp nz, strcpy + ret + \ No newline at end of file diff --git a/src/01/UserPrgm1.z80 b/src/01/UserPrgm1.z80 new file mode 100644 index 0000000..881d6d7 --- /dev/null +++ b/src/01/UserPrgm1.z80 @@ -0,0 +1,10 @@ +UserPrgm1Start: +.db $BB +.dw EndOfUserPrgm1-UserPrgm1 +.db "User.exe", 0 +.fill (UserPrgm1Start + 24)-$ + +.org $D000 +UserPrgm1: + ret +EndOfUserPrgm1: \ No newline at end of file diff --git a/src/01/base.bin b/src/01/base.bin new file mode 100644 index 0000000..a15b0eb Binary files /dev/null and b/src/01/base.bin differ diff --git a/src/01/base.z80 b/src/01/base.z80 new file mode 100644 index 0000000..dccea28 --- /dev/null +++ b/src/01/base.z80 @@ -0,0 +1,3 @@ +.org $4000 + +#include "UserPrgm1.z80" \ No newline at end of file diff --git a/src/privledged/base.bin b/src/privledged/base.bin new file mode 100644 index 0000000..fdab874 Binary files /dev/null and b/src/privledged/base.bin differ diff --git a/src/privledged/base.z80 b/src/privledged/base.z80 new file mode 100644 index 0000000..b7d1fcc --- /dev/null +++ b/src/privledged/base.z80 @@ -0,0 +1,30 @@ +.org $4000 + + rst $00 + +UnlockFlash: + push af + di + ld a, 1 + nop + nop + im 1 + di + out ($14),a + pop af + ei + ret + +LockFlash: + push af + di + xor a + nop + nop + im 1 + di + out ($14),a + pop af + ei + ret + \ No newline at end of file diff --git a/tools/BigInteger.dll b/tools/BigInteger.dll new file mode 100644 index 0000000..e1d1bc9 Binary files /dev/null and b/tools/BigInteger.dll differ diff --git a/tools/Common.dll b/tools/Common.dll new file mode 100644 index 0000000..79eef2d Binary files /dev/null and b/tools/Common.dll differ diff --git a/tools/h2r.exe b/tools/h2r.exe new file mode 100644 index 0000000..03a9947 Binary files /dev/null and b/tools/h2r.exe differ diff --git a/tools/keys/01.txt b/tools/keys/01.txt new file mode 100644 index 0000000..dfe8a60 --- /dev/null +++ b/tools/keys/01.txt @@ -0,0 +1,6 @@ +TI-92 Plus OS Signing Key: +n=AD49CA3CFEF1F2DE400B5D3790813BF3822CB0BD83E3F565CE81B3A6CEF36FB833D932596D0E979615BAB6811ABE68834CA7CEBF46145C1DD1920AA4E9558DF7 +p=331792FFBB24450379CD2FA4F562961625E0EF737006A375CB9ABEA2C9D4E251 +q=3644570912C38CD2D25322B5C2074DC9C40B774873F4BCEF8E1D2526237DE51C7 +e=11 +d=7020B00959AB9D2665AD0014E50853F7EAD19F89AFB19EC9678119E467CAB1B119F600276590FBF65BE2A49E214A26963A827242F8231EBC9EEABFA3B3FFA391 diff --git a/tools/keys/0101.key b/tools/keys/0101.key new file mode 100644 index 0000000..2efde33 --- /dev/null +++ b/tools/keys/0101.key @@ -0,0 +1,3 @@ +406104CDFAD955D41F1ECCB9B622007FE8BC75E8B28DA178334755FEF27C564D47B04FD82498C163B762991C68CF64E29236BC41A4C1BCB9793B6EE965407C74BC +2015A30058B84400F1D456D67CBF6D1DD2CABA346403DD72884F2180310209B3F3 +201D1FCF0D74941DD18C0B077E2E56D1C795546D10F9DAFF8A5464ACDF139CF7C5 diff --git a/tools/keys/0101.txt b/tools/keys/0101.txt new file mode 100644 index 0000000..84e7a81 --- /dev/null +++ b/tools/keys/0101.txt @@ -0,0 +1,6 @@ +TI-92 Plus Freeware Flash Application Signing Key: +n=BC747C4065E96E3B79B9BCC1A441BC3692E264CF681C9962B763C19824D84FB0474D567CF2FE55473378A18DB2E875BCE87F0022B6B9CC1E1FD455D9FACD0461 +p=C5F79C13DFAC64548AFFDAF9106D5495C7D1562E7E070B8CD11D94740DCF1F1D +q=F3B309023180214F8872DD036434BACAD21D6DBF7CD656D4F10044B85800A315 +e=11 +d=376D8DF4D2AE115CC972DD29E504466A676FC34C0F8FF0E0CC86C0780AD6358DB12FD9D2F71F976C369853C14E8D2D2A35397B1E919B2E2857CC42C9A44A7CE1 diff --git a/tools/keys/0102.key b/tools/keys/0102.key new file mode 100644 index 0000000..5dcc989 --- /dev/null +++ b/tools/keys/0102.key @@ -0,0 +1,3 @@ +4085F11FF810591B84875FDE4C92A5961CDD233A9B7ED76E8CFF65128C71420FCCC80E375DC8D2A8551AE2BEB9FD41654CE7B0A95E32BE9997750407904560BEFC +20AB07CBD3276D78777FE14E6048164F95F3E63AD2973BECC89E319ED972418E54 +218FFB96515298A3A08C559840BE71CAFF4D60DD5A5E06396C7686F4661A4E34FD02 diff --git a/tools/keys/0102.txt b/tools/keys/0102.txt new file mode 100644 index 0000000..d80dc4d --- /dev/null +++ b/tools/keys/0102.txt @@ -0,0 +1,6 @@ +TI-73/Explorer Freeware Flash Application Signing Key: +n=FCBE6045900704759799BE325EA9B0E74C6541FDB9BEE21A55A8D2C85D370EC8CC0F42718C1265FF8C6ED77E9B3A23DD1C96A5924CDE5F87841B5910F81FF185 +p=548E4172D99E319EC8EC3B97D23AE6F3954F1648604EE17F77786D27D3CB07AB +q=2FD344E1A66F486766C39065E5ADD604DFFCA71BE4098558CA0A398525196FB8F +e=11 +d=DF0254F215ABD6C21C5A7AA4EA1D41BD072C2B2B2B6C30EA0F58B9FC16036762F370DA14BB164E291FD783F0D9A5684CFF140B02C4E923B8321D85FD8CC5B425 diff --git a/tools/keys/0103.key b/tools/keys/0103.key new file mode 100644 index 0000000..43bf706 --- /dev/null +++ b/tools/keys/0103.key @@ -0,0 +1,3 @@ +40ED0236FD3D8B0CBA88C1CECFA549F8A838CDBAC487F9253F6C67F20C9627984FEA0D0A0BA035424C7B9F5E702286CEDCC66D2DA93320F7071BF2C93C59DE6B91 +209B16C813701163C9221A6926F694971B0A4F777A3BD10E7E2C563B80D18F4155 +211721160E2324E54459AE1DFF49D5EA21453027465E1EEEF2CDF8E05554C7A8B401 diff --git a/tools/keys/0103.txt b/tools/keys/0103.txt new file mode 100644 index 0000000..9e4aa6a --- /dev/null +++ b/tools/keys/0103.txt @@ -0,0 +1,6 @@ +TI-89 Freeware Flash Application Signing Key: +n=916BDE593CC9F21B07F72033A92D6DC6DCCE8622705E9F7B4C4235A00B0A0DEA4F9827960CF2676C3F25F987C4BACD38A8F849A5CFCEC188BA0C8B3DFD3602ED +p=55418FD1803B562C7E0ED13B7A774F0A1B9794F626691A22C963117013C8169B +q=1B4A8C75455E0F8CDF2EE1E5E4627304521EAD549FF1DAE5944E524230E162117 +e=11 +d=33533F6ACA292845C69374C6F06A62FAE485204863E5293A9362A983C7A93215BE3D58A0135A9F3739B4219F4CBEB21625ED5DE7A582D05ED3363C5A6B8865D9 diff --git a/tools/keys/0104.key b/tools/keys/0104.key new file mode 100644 index 0000000..05918c3 --- /dev/null +++ b/tools/keys/0104.key @@ -0,0 +1,3 @@ +40AD2431DA2297E4175EAC61A3154FA3D847115794DD330AB7FF36BA59FEDA195FEA7C16743BD7BCED8A0DA885E5E5C34D5BF20D0AB3EF9181ED39BA2C4D898E87 +205B2E54E9B5C1FE26CE93261478D3873F3FC41BFFF1F5F934D7A5793A43C1C21C +2197F7707B94079B73858720BF6D4909AB3BEDA1BA9B93112B041340A16ED597B604 diff --git a/tools/keys/0104.txt b/tools/keys/0104.txt new file mode 100644 index 0000000..85b1021 --- /dev/null +++ b/tools/keys/0104.txt @@ -0,0 +1,6 @@ +TI-83 Plus/Silver Edition Freeware Flash Application Signing Key: +n=878E894D2CBA39ED8191EFB30A0DF25B4DC3E5E585A80D8AEDBCD73B74167CEA5F19DAFE59BA36FFB70A33DD94571147D8A34F15A361AC5E17E49722DA3124AD +p=1CC2C1433A79A5D734F9F5F1FF1BC43F3F87D378142693CE26FEC1B5E9542E5B +q=04B697D56EA14013042B11939BBAA1ED3BAB09496DBF208785739B07947B70F797 +e=11 +d=7F9535EE4836CD1BC53E0EC6A00D2055EED67E0532800CBEFDDEE8B06D42576EA1A4F4FCB2D3498B9D2BEB9673632CFD1C4D5C693C553D370C82A39E8CA1E0B1 diff --git a/tools/keys/0108.key b/tools/keys/0108.key new file mode 100644 index 0000000..c322e4a --- /dev/null +++ b/tools/keys/0108.key @@ -0,0 +1,3 @@ +407F0754F917A3D549754415DFA71A7FE11247DF26058001A246B0013FF355DA7FE46B1121FBB0E2A36BAC95BBA347261D7FBBC3B947DE3902AE9E8E51EE2532B5 +20976B935A1A4E9A0A32C9996EA5B3F51F5E1BD1BB58D246D7DC8EE648346D3049 +2159607D0D437D5775C737EB4D5718605CAD8EA3FD0274CBB6224B369920CBC87902 diff --git a/tools/keys/0108.txt b/tools/keys/0108.txt new file mode 100644 index 0000000..5210882 --- /dev/null +++ b/tools/keys/0108.txt @@ -0,0 +1,6 @@ +Voyage 200 Freeware Flash Application Signing Key: +n=B53225EE518E9EAE0239DE47B9C3BB7F1D2647A3BB95AC6BA3E2B0FB21116BE47FDA55F33F01B046A201800526DF4712E17F1AA7DF15447549D5A317F954077F +p=49306D3448E68EDCD746D258BBD11B5E1FF5B3A56E99C9320A9A4E1A5A936B97 +q=279C8CB2099364B22B6CB7402FDA38EAD5C6018574DEB37C775577D430D7D6059 +e=11 +d=8A8FC2A72F4EF1D05C0E22731595AD7F5286AF40F8DBDE343207B483CDFE43706342BC4BECAEFE365A89C2AEBD154AE789980EFB56AA8DF5400895E905ABE241 diff --git a/tools/keys/0109.key b/tools/keys/0109.key new file mode 100644 index 0000000..e3df5e9 --- /dev/null +++ b/tools/keys/0109.key @@ -0,0 +1,3 @@ +405D14C1A69D6985449FBAA57BEB7BA23EC96D4EBC088B6E245FA98DBEFBA68001AF3AF01FCFB73ED7C9976767D6C3350FE26CD865857F5F25E8125880D01E4285 +200B5E1657411F43E9F9F98DC688C79380A0E7B43FA6943FC3BDCA25D0976EDC01 +2137A0043A3A6051BBB546DBFB768AAC138826901EA2139D678CEB95600429749A47 diff --git a/tools/keys/0109.txt b/tools/keys/0109.txt new file mode 100644 index 0000000..e43ac43 --- /dev/null +++ b/tools/keys/0109.txt @@ -0,0 +1,6 @@ +TI-89 Titanium Freeware Flash Application Signing Key: +n=85421ED0805812E8255F7F8565D86CE20F35C3D6676797C9D73EB7CF1FF03AAF0180A6FBBE8DA95F246E8B08BC4E6DC93EA27BEB7BA5BA9F4485699DA6C1145D +p=1DC6E97D025CABDC33F94A63FB4E7A08093C788C68DF9F9E9431F4157165E0B +q=479A7429046095EB8C679D13A21E90268813AC8A76FBDB46B5BB51603A3A04A037 +e=11 +d=468C6AAA9E4CBEB722D83473CC81A30E4449A3E9FA82232E9F2134225C33E2AF3591EA056932EA1A29C5B447B95041AF6943072271200451AF07128A83EE842D diff --git a/tools/keys/010A.key b/tools/keys/010A.key new file mode 100644 index 0000000..968137b --- /dev/null +++ b/tools/keys/010A.key @@ -0,0 +1,3 @@ +4005D1EB8485AA14C983FFA04031B27C89950C3D7F4181FE603A353F48DE0933DFE1173BDD2E14FEB7325BAA35A12F21804DCFD30E56119C1305D348A77BCF448F +208BCEED26E2537E897E3AFDD1E831AEC1BF7437F4C9E1A0DD09B67B66938D9D02 +21AFE026E1181E8196772F4DC38977E000421AAD8BD66F2C7F614DF20A90642EC736 diff --git a/tools/keys/010A.txt b/tools/keys/010A.txt new file mode 100644 index 0000000..b45d4a4 --- /dev/null +++ b/tools/keys/010A.txt @@ -0,0 +1,6 @@ +TI-84 Plus/Silver Edition Freeware Flash Application Signing Key: +n=8F44CF7BA748D305139C11560ED3CF4D80212FA135AA5B32B7FE142EDD3B17E1DF3309DE483F353A60FE81417F3D0C95897CB23140A0FF83C914AA8584EBD105 +p=29D8D93667BB609DDA0E1C9F43774BFC1AE31E8D1FD3A7E897E53E226EDCE8B +q=36C72E64900AF24D617F2C6FD68BAD1A4200E07789C34D2F7796811E18E126E0AF +e=11 +d=6521836657F72B8B1CE6A2D355C2B072F1085DDB34F0B8D881E086B7AB38C569B4C13DED4C576E7402F58B083BC5FE4A32116F95A61F0027C2A59152B279BD81 diff --git a/tools/keys/02.key b/tools/keys/02.key new file mode 100644 index 0000000..de47716 --- /dev/null +++ b/tools/keys/02.key @@ -0,0 +1,3 @@ +4081396D55C0989BC949FA30821FFE61C9441EDC3827D0E89EEE16DDEF697634B8E10B8B7F42FE7CC1A7478606D6D09F6FE96365E71E3D2AAA7C8D91068F1DFAF3 +20E1A6FD4557AB2234E92FACBBADD9E7FA2452B5C238F1EF296AFB2BFE67BACC1E +21A106BE04DC99B4F389D3B96951224E064F417E34EEF53130E9BEDC9A721EE1EB07 diff --git a/tools/keys/02.txt b/tools/keys/02.txt new file mode 100644 index 0000000..9e598a5 --- /dev/null +++ b/tools/keys/02.txt @@ -0,0 +1,6 @@ +TI-73/Explorer OS Signing Key: +n=F3FA1D8F06918D7CAA2A3D1EE76563E96F9FD0D6068647A7C17CFE427F8B0BE1B8347669EFDD16EE9EE8D02738DC1E44C961FE1F8230FA49C99B98C0556D3981 +p=1ECCBA67FE2BFB6A29EFF138C2B55224FAE7D9ADBBAC2FE93422AB5745FDA6E1 +q=7EBE11E729ADCBEE93031F5EE347E414F064E225169B9D389F3B499DC04BE06A1 +e=11 +d=396806F47A04214A82644A9DDC17DB45FC259A8CB63DB681D32C780FA58A20E7EC982512AB04CA7EE301A03C4BAF2FB8A791E261F7B74923715B5EF4028420F1 diff --git a/tools/keys/03.key b/tools/keys/03.key new file mode 100644 index 0000000..56597c5 --- /dev/null +++ b/tools/keys/03.key @@ -0,0 +1,3 @@ +40E7C21F66BD1116F2F4F691121F3330060E24C8C7A1858D49636E24E80015F3AA25C2F6033AB39067D453945ABD8A5F4CFAFADABAF8BA2BFB88895A04B5D47689 +202312902DCC81354C43EB01DB7E9404BC1140E85F1A0CC0B00E166B2290C5EE04 +216D6E5F7F6C6E7248B28C475B066D447521E4F6168F0DBB7ACFD69EAD277D30DE1B diff --git a/tools/keys/03.txt b/tools/keys/03.txt new file mode 100644 index 0000000..243b0f1 --- /dev/null +++ b/tools/keys/03.txt @@ -0,0 +1,6 @@ +TI-89 OS Signing Key: +n=8976D4B5045A8988FB2BBAF8BADAFAFA4C5F8ABD5A9453D46790B33A03F6C225AAF31500E8246E63498D85A1C7C8240E0630331F1291F6F4F21611BD661FC2E7 +p=4EEC590226B160EB0C00C1A5FE84011BC04947EDB01EB434C3581CC2D901223 +q=1BDE307D27AD9ED6CF7ABB0D8F16F6E42175446D065B478CB248726E6C7F5F6E6D +e=11 +d=7134AF2BA93B8052B0BA99FA034AECCE20C726F64A984509463AEDF38ACB3662685416968C52104F822D49DB8DED0EF07318BF6FA659D1FF7A1E75F4D4BE54C1 diff --git a/tools/keys/04.key b/tools/keys/04.key new file mode 100644 index 0000000..6624af4 --- /dev/null +++ b/tools/keys/04.key @@ -0,0 +1,3 @@ +408FE528B340EB1C88B505B2354BAADF47F3616D92CB532E7E5A2A0DFF1C4E4283CEEA2B2F7AD5F28B7E4BE4F3F4C99CABA0D98A8E5F2BE15E2AAC7CED0940EF82 +20CDFF9610024DB1B7AD46D691E0E538BB00A1D840F5CCAF8EC0FED20C3A9D700B +21CB4662A9084F5076B117892EBA3FB0DF9EB24988A62A83890B5A0B4E18BD07720B diff --git a/tools/keys/04.txt b/tools/keys/04.txt new file mode 100644 index 0000000..dfda654 --- /dev/null +++ b/tools/keys/04.txt @@ -0,0 +1,6 @@ +TI-83 Plus/Silver Edition OS Signing Key: +n=82EF4009ED7CAC2A5EE12B5F8E8AD9A0AB9CC9F4F3E44B7E8BF2D57A2F2BEACE83424E1CFF0D2A5A7E2E53CB926D61F347DFAA4B35B205B5881CEB40B328E58F +p=B709D3A0CD2FEC08EAFCCF540D8A100BB38E5E091D646ADB7B14D021096FFCD +q=B7207BD184E0B5A0B89832AA68849B29EDFB03FBA2E8917B176504F08A96246CB +e=11 +d=4D0534BA8BB2BFA0740BFB6562E843C7EC7A58AE351CE11D43438CA239DD99276CD125FEBAEE5D2696579FA3A3958FF4FC54C685EAA91723BC8888F292947BA1 diff --git a/tools/keys/05.key b/tools/keys/05.key new file mode 100644 index 0000000..41679a6 --- /dev/null +++ b/tools/keys/05.key @@ -0,0 +1,3 @@ +406BABF27E9BF1826FD46CBF934E3360EF1F1D3D09D6C74E9DF78049D01A42F584BD383A10E64330C2EE6F1B1C5162789E91E94677900F85D98E7D99F49B30A2BF +20F59BA0274F1CA6231A882B053AAD9A2B80EBE9D2B6E9FD1CDCFCE1AD9D9414D3 +20DFED657A28DE2BFF75DE4F1AEBB7555859779DA38A671B7C76F81B50F02A6AE8 diff --git a/tools/keys/05.txt b/tools/keys/05.txt new file mode 100644 index 0000000..398c15c --- /dev/null +++ b/tools/keys/05.txt @@ -0,0 +1,6 @@ +Community-created 05 Signing Key: +n=BFA2309BF4997D8ED9850F907746E9919E7862511C1B6FEEC23043E6103A38BD84F5421AD04980F79D4EC7D6093D1D1FEF60334E93BF6CD46F82F19B7EF2AB6B +p=D314949DADE1FCDC1CFDE9B6D2E9EB802B9AAD3A052B881A23A61C4F27A09BF5 +q=E86A2AF0501BF8767C1B678AA39D77595855B7EB1A4FDE75FF2BDE287A65EDDF +e=11 +d=70B9C23D9EF0E072259990AF5538C5A0F3CE57F379F2059B8149915A27A9C7050D1889078AC306D98A0154CFDDD44F74B7AB2DFA44643FEBF0E0916063D631E1 diff --git a/tools/keys/08.key b/tools/keys/08.key new file mode 100644 index 0000000..8485cf5 --- /dev/null +++ b/tools/keys/08.key @@ -0,0 +1,3 @@ +40110510EE17B0A300E2BB27441F266843EDB541BAC1077AC203CF18ABB7800F8F0E259495F80D863C49C4EE7E9FB1FE03488A140C7CD5A54CE148C8CE22B00783 +207BEE08D9E4AD5B6872E14C48D26633E6E5A5529C84EDFCE80A6FAB848DEEFA08 +21E34A0FB79D346138618437BE848BA72A0F4737F6EE6C5786AFF5A3BCEB044B970E diff --git a/tools/keys/08.txt b/tools/keys/08.txt new file mode 100644 index 0000000..dd04828 --- /dev/null +++ b/tools/keys/08.txt @@ -0,0 +1,6 @@ +Voyage 200 OS Signing Key: +n=8307B022CEC848E14CA5D57C0C148A4803FEB19F7EEEC4493C860DF89594250E8F0F80B7AB18CF03C27A07C1BA41B5ED4368261F4427BBE200A3B017EE100511 +p=8FAEE8D84AB6F0AE8FCED849C52A5E5E63366D2484CE172685BADE4D908EE7B +q=E974B04EBBCA3F5AF86576CEEF637470F2AA78B84BE3784613861349DB70F4AE3 +e=11 +d=2689CA64972BD93334A93ECA21ABB0334C78161FDA09FD7EF3AEF50CE0B319F0EBE0ED4E979597BB36929C6247EAC2A35A2987B35D6C467CB2CB69A466EE8735 diff --git a/tools/keys/09.key b/tools/keys/09.key new file mode 100644 index 0000000..ce17063 --- /dev/null +++ b/tools/keys/09.key @@ -0,0 +1,3 @@ +40D1AF8EFD841732F96ABB28D11A557AC2B102B19D9FE6D7926CF8B0122A57A4B0D7F2DDFE1F3B2C2C23A4D3F01519FE4E60A3ACF9C035CD802B45DA0AFA3951D6 +20C13946416BCC888549FD70FB37AF33EF95C8844EF429273271A5486627D6390F +21115A5717A51881A626D5B1F7AF134EC6B13937799F1FC652E7EA2F70949E68130E diff --git a/tools/keys/09.txt b/tools/keys/09.txt new file mode 100644 index 0000000..271fb41 --- /dev/null +++ b/tools/keys/09.txt @@ -0,0 +1,6 @@ +TI-89 Titanium OS Signing Key: +n=D65139FA0ADA452B80CD35C0F9ACA3604EFE1915F0D3A4232C2C3B1FFEDDF2D7B0A4572A12B0F86C92D7E69F9DB102B1C27A551AD128BB6AF9321784FD8EAFD1 +p=F39D6276648A571322729F44E84C895EF33AF37FB70FD498588CC6B414639C1 +q=E13689E94702FEAE752C61F9F793739B1C64E13AFF7B1D526A68118A517575A11 +e=11 +d=97486528F89A12B54BDC25F1A12E917128B35D006DC291FAB5C4DE70F02432E8A079CD0284DC85B3CD968CF94BBC004ADBFAC18D516D9565BDFE41BBBFB940F1 diff --git a/tools/keys/0A.key b/tools/keys/0A.key new file mode 100644 index 0000000..53e7a32 --- /dev/null +++ b/tools/keys/0A.key @@ -0,0 +1,3 @@ +40B11C71D4EA2C13C9AB2E501C6085FEC87FF3B88BFD783EAC43351E1B10F65AD31C79C1268F75051DC8FC008EBF593AE5912E8B653975C13127E2B60A0BEF5FEF +204DD5B4E544CACBC4EF869CDA30A6908FF7D1BDDB92B1ADE1E1C93CC614904894 +21F5E2DFBCA3D5C86F4815DC69452E4FC7D122D650374E880B62294279F21A439D01 diff --git a/tools/keys/0A.txt b/tools/keys/0A.txt new file mode 100644 index 0000000..19210aa --- /dev/null +++ b/tools/keys/0A.txt @@ -0,0 +1,6 @@ +TI-84 Plus/Silver Edition OS Signing Key: +n=EF5FEF0B0AB6E22731C17539658B2E91E53A59BF8E00FCC81D05758F26C1791CD35AF6101B1E3543AC3E78FD8BB8F37FC8FE85601C502EABC9132CEAD4711CB1 +p=94489014C63CC9E1E1ADB192DBBDD1F78F90A630DA9C86EFC4CBCA44E5B4D54D +q=19D431AF2794229620B884E3750D622D1C74F2E4569DC15486FC8D5A3BCDFE2F5 +e=11 +d=2A3E1B2010F318D9BD7C7E19300980B055A0E2A9554B77E7142E23CDF7C7CA13C233A3D462FDFC968B1F9CEAF2AC2CF305147992AD9E834192ACEBB517DB9941 diff --git a/tools/keys/datestamp.key b/tools/keys/datestamp.key new file mode 100644 index 0000000..97f7426 --- /dev/null +++ b/tools/keys/datestamp.key @@ -0,0 +1,3 @@ +40151ED10541142F250DB7DFD771092E024DC75483E37A84ACA694752E33FF1BB5408B1B4871CE61FB1403C81F4E71FD8F89A7B03A39FC798D19471ABBA737E3A3 +204547FD23B5CD3E61524F82EC77DBB72E951F6340F0FA08AE9D5385FF6B31D703 +2191C0C80042D8FABCE153EFFC084F4E132C971D000631CB35AE3D2A99B21423AC2A diff --git a/tools/keys/datestamp.txt b/tools/keys/datestamp.txt new file mode 100644 index 0000000..a3542fb --- /dev/null +++ b/tools/keys/datestamp.txt @@ -0,0 +1,12 @@ +Date Stamp Signing Key for: + TI-73/Explorer + TI-83 Plus/Silver Edition + TI-84 Plus/Silver Edition + TI-89/Titanium + TI-92 Plus + Voyage 200 +n=A3E337A7BB1A47198D79FC393AB0A7898FFD714E1FC80314FB61CE71481B8B40B51BFF332E7594A6AC847AE38354C74D022E0971D7DFB70D252F144105D11E15 +p=3D7316BFF85539DAE08FAF040631F952EB7DB77EC824F52613ECDB523FD4745 +q=2AAC2314B2992A3DAE35CB3106001D972C134E4F08FCEF53E1BCFAD84200C8C091 +e=11 +d=60678A266E0F751E16FC763FC82BADD872D151B57C1B4D1B66B200F75797BB3A2122E55767292F2657EF3D7C81A9EB9D8017741540F57516405422C20BE86771 diff --git a/tools/multihex.exe b/tools/multihex.exe new file mode 100644 index 0000000..1b66a87 Binary files /dev/null and b/tools/multihex.exe differ diff --git a/tools/multihexold.exe b/tools/multihexold.exe new file mode 100644 index 0000000..d233dad Binary files /dev/null and b/tools/multihexold.exe differ diff --git a/tools/packxxu.exe b/tools/packxxu.exe new file mode 100644 index 0000000..b82b5fe Binary files /dev/null and b/tools/packxxu.exe differ diff --git a/tools/rabbitsign.exe b/tools/rabbitsign.exe new file mode 100644 index 0000000..0ec44b5 Binary files /dev/null and b/tools/rabbitsign.exe differ diff --git a/tools/spasm.exe b/tools/spasm.exe new file mode 100644 index 0000000..5639324 Binary files /dev/null and b/tools/spasm.exe differ