From 4f93a2053b17c22f621c35c9085e3ea6ed5ea28f Mon Sep 17 00:00:00 2001 From: 4am Date: Sat, 9 Mar 2019 15:09:16 -0500 Subject: [PATCH] initial import --- .gitignore | 2 + Makefile | 35 +++++++ res/_FileInformation.txt | 2 + res/notes.txt | 19 ++++ res/work.po | Bin 0 -> 143360 bytes src/anti-m.a | 204 +++++++++++++++++++++++++++++++++++++++ src/lcase.ct | 1 + 7 files changed, 263 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 res/_FileInformation.txt create mode 100644 res/notes.txt create mode 100644 res/work.po create mode 100644 src/anti-m.a create mode 100755 src/lcase.ct diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9955f60 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +/build/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4d5bb68 --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +# +# Anti-M Makefile +# assembles source code, optionally builds a disk image and mounts it +# +# original by Quinn Dunki on 2014-08-15 +# One Girl, One Laptop Productions +# http://www.quinndunki.com/blondihacks +# +# adapted by 4am on 2019-03-09 +# + +# third-party tools required to build +# https://sourceforge.net/projects/acme-crossass/ +ACME=acme +# https://www.brutaldeluxe.fr/products/crossdevtools/cadius/ +# https://github.com/mach-kernel/cadius +CADIUS=cadius + +BUILDDISK=build/anti-m.po +VOLUME=ANTI.M + +asm: + mkdir -p build + $(ACME) -r build/anti-m.lst src/anti-m.a + cp res/work.po $(BUILDDISK) + cp res/_FileInformation.txt build/ >>build/log + $(CADIUS) ADDFILE "$(BUILDDISK)" "/${VOLUME}/" "build/ANTI.M.SYSTEM" >>build/log + +clean: + rm -rf build/ + +mount: + open "$(BUILDDISK)" + +all: clean asm mount diff --git a/res/_FileInformation.txt b/res/_FileInformation.txt new file mode 100644 index 0000000..fdd4d7e --- /dev/null +++ b/res/_FileInformation.txt @@ -0,0 +1,2 @@ +PRODOS=Type(FF),AuxType(0000),Access(C3) +ANTI.M.SYSTEM=Type(FF),AuxType(2000),Access(C3) diff --git a/res/notes.txt b/res/notes.txt new file mode 100644 index 0000000..d446d68 --- /dev/null +++ b/res/notes.txt @@ -0,0 +1,19 @@ +Tested (Broderbund): +- Choplifter +- Dueling Digits +- Labyrinth +- Seafox +- Serpentine +- Star Blazer + +Tested (Gebelli): +- Eggs-It +- Horizon V +- High Orbit +- Neptune +- Phaser Fire +- Russki Duck +- Zenith + +Untested (Gebelli): +- Lazer Silk diff --git a/res/work.po b/res/work.po new file mode 100644 index 0000000000000000000000000000000000000000..0dc910aea3931ec0fe781a97ab2c3cd257ed2325 GIT binary patch literal 143360 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 + sta $0839 + jmp $0801 +@callback1 +; duplicate bootloader from $0300 to $2300 + ldx #$00 +- lda $0300,x + sta $2300,x + inx + bne - +; patch bootloader so it reads the pristine copy at $2300 + lda #$23 + sta $030A + sta $0310 + sta $0316 + sta $031C +; patch bootloader to regain control after it decrypts itself into $0100 + lda #$4C + sta $0325 + lda #<@callback2 + sta $0326 + lda #>@callback2 + sta $0327 + jmp $0301 +@callback2 +; patch bootloader to regain control after it loads 4 sectors into $0400 + lda #$4C + sta $01FB + lda #<@callback3 + sta $01FC + lda #>@callback3 + sta $01FD + rts +@callback3 +; patch bootloader so it doesn't wipe main memory + lda #$60 + sta $04E2 +; patch bootloader to regain control after it loads title screen and code into $2000+ + lda #$4C + sta $0498 + lda #<@callback4 + sta $0499 + lda #>@callback4 + sta $049A +; restore bytes on stack page that we patched earlier because they're checksummed soon + lda #$AE + sta $01FB + lda #$65 + sta $01FC + lda #$05 + sta $01FD + jmp $01FB +@callback4 +; patch bootloader to bypass ROM check at $6300 + lda #$60 + sta $0421 + jmp $0400 +} +EndTracer=* + +PrintByID + cmp #STRINGCOUNT + bcs @exit + asl + tax + lda StringTable,x + sta @print+1 + lda StringTable+1,x + sta @print+2 +@print + lda $FFFF ; SMC + beq @done + jsr COUT + inc @print+1 + bne @print + inc @print+2 + bne @print +@done + clc +@exit + rts + +; +; String IDs +; (pass in accumulator to PrintByID) +; +s_header = $00 +s_mainmenu = $01 +STRINGCOUNT = $02 + +StringTable + !word @header + !word @mainmenu + +@header + !text "Anti-M by 4am 2019-03-09",$00 +@mainmenu + !text "________________________________________",$8D + !text $8D,$8D,$8D,$8D,$8D,$8D,$8D,$8D + !text " Insert original disk in slot 6 drive 1",$8D + !text $8D + !text " and press to boot",$00 diff --git a/src/lcase.ct b/src/lcase.ct new file mode 100755 index 0000000..38dee39 --- /dev/null +++ b/src/lcase.ct @@ -0,0 +1 @@ + \ No newline at end of file