diff --git a/source/twilight/nm/FIRE.BUG b/source/twilight/nm/FIRE.BUG new file mode 100644 index 0000000..c59765f Binary files /dev/null and b/source/twilight/nm/FIRE.BUG differ diff --git a/source/twilight/nm/Fireworks.Macs b/source/twilight/nm/Fireworks.Macs new file mode 100644 index 0000000..441dcd6 --- /dev/null +++ b/source/twilight/nm/Fireworks.Macs @@ -0,0 +1,285 @@ + MACRO +&lab _FixRatio +&lab ldx #$0E0B + jsl $E10000 + MEND + MACRO +&lab _UDivide +&lab ldx #$0B0B + jsl $E10000 + MEND + MACRO +&LAB LONG &A,&B + LCLB &I + LCLB &M +&A AMID &A,1,1 +&M SETB ("&A"="M").OR.("&A"="m") +&I SETB ("&A"="I").OR.("&A"="i") + AIF C:&B=0,.A +&B AMID &B,1,1 +&M SETB ("&B"="M").OR.("&B"="m").OR.&M +&I SETB ("&B"="I").OR.("&B"="i").OR.&I +.A +&LAB REP #&M*32+&I*16 + AIF .NOT.&M,.B + LONGA ON +.B + AIF .NOT.&I,.C + LONGI ON +.C + MEND + MACRO +&LAB SHORT &A,&B + LCLB &I + LCLB &M +&A AMID &A,1,1 +&M SETB ("&A"="M").OR.("&A"="m") +&I SETB ("&A"="I").OR.("&A"="i") + AIF C:&B=0,.A +&B AMID &B,1,1 +&M SETB ("&B"="M").OR.("&B"="m").OR.&M +&I SETB ("&B"="I").OR.("&B"="i").OR.&I +.A +&LAB SEP #&M*32+&I*16 + AIF .NOT.&M,.B + LONGA OFF +.B + AIF .NOT.&I,.C + LONGI OFF +.C + MEND + MACRO +&lab WordResult +&lab pha + MEND + MACRO +&lab LongResult +&lab pha + pha + MEND + MACRO +&lab _Random +&lab ldx #$8604 + jsl $E10000 + MEND + MACRO +&lab pushword &SYSOPR +&lab ANOP + AIF C:&SYSOPR=0,.b + LCLC &C +&C AMID "&SYSOPR",1,1 + AIF ("&C"="#").AND.(S:LONGA),.immediate + lda &SYSOPR + pha + MEXIT +.b + pha + MEXIT +.immediate + LCLC &REST + LCLA &BL +&BL ASEARCH "&SYSOPR"," ",1 + AIF &BL>0,.a +&BL SETA L:&SYSOPR+1 +.a +&REST AMID "&SYSOPR",2,&BL-2 + dc I1'$F4',I2'&REST' + MEND + MACRO +&lab _CallCtlDefProc +&lab ldx #$2C10 + jsl $E10000 + MEND + MACRO +&lab _GetCtlHandleFromID +&lab ldx #$3010 + jsl $E10000 + MEND + MACRO +&lab _NewControl2 +&lab ldx #$3110 + jsl $E10000 + MEND + MACRO +&lab _MMStartUp +&lab ldx #$0202 + jsl $E10000 + MEND + MACRO +&lab _NewHandle +&lab ldx #$0902 + jsl $E10000 + MEND + MACRO +&LAB JCC &BP +&LAB BCS *+5 + BRL &BP + MEND + MACRO +&lab killLdp +&lab pld + pla + pla + MEND + MACRO +&lab MakeDP +&lab phd + tsc + tcd + MEND + MACRO +&lab pulllong &addr1,&addr2 +&lab ANOP + AIF C:&addr1=0,.a + AIF C:&addr2=0,.b + LCLC &C +&C AMID &addr1,1,1 + AIF "&C"="[",.zeropage + pullword &addr1 + sta &addr2 + pullword &addr1+2 + sta &addr2+2 + MEXIT +.a + pullword + pullword + MEXIT +.b + pullword &addr1 + pullword &addr1+2 + MEXIT +.zeropage + ldy #&addr2 + pullword &addr1,y + ldy #&addr2+2 + pullword &addr1,y + MEND + MACRO +&lab pullword &SYSOPR +&lab ANOP + pla + AIF C:&SYSOPR=0,.end + sta &SYSOPR +.end + MEND + MACRO +&lab pushlong &addr,&offset +&lab ANOP + LCLC &C + LCLC &REST +&C AMID &addr,1,1 + AIF "&C"="#",.immediate + AIF "&C"="[",.zeropage + AIF C:&offset=0,.nooffset + AIF "&offset"="s",.stack + pushword &addr+2,&offset + pushword &addr,&offset + MEXIT +.nooffset + pushword &addr+2 + pushword &addr + MEXIT +.immediate +&REST AMID &addr,2,L:&addr-1 + dc I1'$F4',I2'(&REST)|-16' + dc I1'$F4',I2'&REST' + MEXIT +.stack + pushword &addr+2,s + pushword &addr+2,s + MEXIT +.zeropage + ldy #&offset+2 + pushword &addr,y + ldy #&offset + pushword &addr,y + MEND + MACRO +&lab str &string +&lab dc i1'L:&string',C'&string' + MEND + MACRO +&lab _GetWRefCon +&lab ldx #$290E + jsl $E10000 + MEND + MACRO +&lab _AddResource +&lab ldx #$0C1E + jsl $E10000 + MEND + MACRO +&lab _GetCurResourceApp +&lab ldx #$141E + jsl $E10000 + MEND + MACRO +&lab _GetCurResourceFile +&lab ldx #$121E + jsl $E10000 + MEND + MACRO +&lab _LoadResource +&lab ldx #$0E1E + jsl $E10000 + MEND + MACRO +&lab _MarkResourceChange +&lab ldx #$101E + jsl $E10000 + MEND + MACRO +&lab _ReleaseResource +&lab ldx #$171E + jsl $E10000 + MEND + MACRO +&lab _SetCurResourceFile +&lab ldx #$111E + jsl $E10000 + MEND + MACRO +&lab _UniqueResourceID +&lab ldx #$191E + jsl $E10000 + MEND + MACRO +&lab _UpdateResourceFile +&lab ldx #$0D1E + jsl $E10000 + MEND + MACRO +&lab _RMFindNamedResource +&lab ldx #$2A1E + jsl $E10000 + MEND + MACRO +&lab _RMLoadNamedResource +&lab ldx #$2C1E + jsl $E10000 + MEND + MACRO +&lab _RMSetResourceName +&lab ldx #$2D1E + jsl $E10000 + MEND + MACRO +&lab _GetCtlValue +&lab ldx #$1A10 + jsl $E10000 + MEND + MACRO +&lab _SetCtlValue +&lab ldx #$1910 + jsl $E10000 + MEND + MACRO +&lab _MakeThisCtlTarget +&lab ldx #$2810 + jsl $E10000 + MEND + MACRO +&lab _SysFailMgr +&lab ldx #$1503 + jsl $E10000 + MEND diff --git a/source/twilight/nm/delta/delta.asm b/source/twilight/nm/delta/delta.asm new file mode 100644 index 0000000..1f406ee --- /dev/null +++ b/source/twilight/nm/delta/delta.asm @@ -0,0 +1,246 @@ +* +* Asm part of delta cruncher. +* By Nathan Mates, 2/12/94 +* +* Reads in file, crunches it, and writes it back to disk. +* +* + + mcopy macros/delta.macs + + copy 18:e16.memory + copy 18:e16.gsos + + +Temp gequ 1 +LastVal gequ 5 + + case on +* +* +DoDelta start +* +* Does the delta compression stuff... +* +* + case off + using Globals + + phk + phk + plb + lda 4+1,s + sta InString + lda 6+1,s + sta InString+2 + phd + pha + pha + pha + tsc + tcd + stz Err + jsr loadit + lda Err + bne Exit + jsr DeltaIt ;don't bother delta'ing if had error in loading + jsr saveit +Exit pla + pla + pla + lda Err ;error code to be returned + pld + lda 1,s + sta 5,s + lda 3,s + sta 7,s + plx + plx ;clean up off stack + plb + rtl + end + +* +* +Globals data +* +* Asm globals +* +* +gReadRec dc i'4' ;pCount +gReadRefNum ds 2 ;input +gReadPtr ds 4 ;where to load ptr +gReadSize ds 4 ;load $8000 bytes of data + ds 4 ;how many bytes were loaded + +gCloseRec dc i'1' ;pCount +gCloseRefNum ds 2 ;refNum to close + +gOpenRecGS anop + dc i'12' ;pCount +gOpenRefNum ds 2 ;output + dc i4'CStringBuf' ;ptr to pathname + dc i'readwriteEnable' ;we'll need read & write access... + dc i'$0000' ;open data fork + ds 2 ;returned access +gOpenFileType ds 2 ;returned file type + ds 4 ;returned aux + ds 2 ;returned storage type + ds 8 ;returned create time + ds 8 ;returned mod time + dc i4'0' ;optionlist ptr +gOpenEOF ds 4 ;data fork's eof + +Err ds 2 +InString ds 4 + +CStringBuf ds 500 ;enough for most pathnames +LoadHndl ds 4 + + end + + +* +* +LoadIt start +* +* Loads the picture in from disk... +* +* + using Globals + + stz LoadHndl + stz LoadHndl+2 + + mov InString,Temp + mov InString+2,temp+2 ;move ptr to c-string in to DP loc... + + shortm + ldy #0 +C2OSStr lda [Temp],y + sta CStringBuf+2,y + beq DoneCopy + iny + cpy #498 + blt C2OSStr +DoneCopy sty CStringBuf + longm + + _OpenGS gOpenRecGS + bcs IOErr + + lda gOpenRefNum + sta gReadRefNum + sta gCloseRefNum + + LongResult + lda gOpenEOF+2 + sta gReadSize+2 + pha + lda gOpenEOF + sta gReadSize + pha ;size/4 + WordResult + _MMStartup ;get my memory ID + PushWord #attrNoPurge+attrLocked ;locked until we dump things in it + PushLong #0 ;@loc + _NewHandle + plx + ply + bcs CloseErr ;store error message & close file + + stx LoadHndl + sty LoadHndl+2 + stx Temp + sty Temp+2 + lda [temp] + tax + ldy #2 + lda [temp],y + sta gReadPtr+2 + stx gReadPtr + + _ReadGS gReadRec + bcc CloseIt +CloseErr sta Err +CloseIt _CloseGS gCloseRec + rts + +IOErr sta Err + rts + end + +* +* +DeltaIt start +* +* Delta's the file... +* +* + using Globals + mov gReadPtr,temp ;ptr to start + mov gReadPtr+2,temp+2 + + stz Count + stz Count+2 + shortm + lda [temp] + sta LastVal +NextByte longm + inc temp ;increment 32 bit address... + bne NextCount + inc temp+2 ;bump high word too, it seems +NextCount inc Count + bne ChkEnd + inc Count+2 +ChkEnd lda Count+2 + cmp gReadSize+2 ;how do the high words compare? + blt GetDelta ;don't match yet. can keep going + lda Count + cmp gReadSize +* beq GetDelta ;if low words =, on last byte (do it also) + bge Done ;low words >=, so time to quit + +GetDelta lda #0 ;clear all bits + shortm + lda [temp] + tax ;store for a second + sec + sbc LastVal ;get difference from previous byte + sta [temp] + stx LastVal + bra NextByte + +Done longm + rts + +Count ds 4 + end + +* +* +SaveIt start +* +* Loads the picture in from disk... +* +* + using Globals + + _OpenGS gOpenRecGS + bcs IOErr + + lda gOpenRefNum + sta gReadRefNum + sta gCloseRefNum + + _WriteGS gReadRec + bcc CloseIt +CloseErr sta Err +CloseIt _CloseGS gCloseRec +DumpHandle PushLong LoadHndl + _DisposeHandle ;dump the handle we allocated + rts + +IOErr sta Err + bra DumpHandle + end \ No newline at end of file diff --git a/source/twilight/nm/delta/delta.cc b/source/twilight/nm/delta/delta.cc new file mode 100644 index 0000000..d0bb11b --- /dev/null +++ b/source/twilight/nm/delta/delta.cc @@ -0,0 +1,47 @@ +#include +#pragma lint -1 +#pragma optimize -1 + +/* + * Fcn prototype for asm subroutine that does 90% of the work + * + */ + +int DoDelta (char *filename); + +/* + * C language preprocessor for + * delta engine... gets the command line args and all + * + */ + +int main (int argc, char *argv[]) +{ + int i; + int err=0; + int count; + + /* + printf("Number of args=%d\n",argc); + printf("Command name:'%s \n", argv[0]); + for (i=1;i=2) + { + for (count=1;count0,.a +&BL SETA L:&SYSOPR+1 +.a +&REST AMID "&SYSOPR",2,&BL-2 + dc I1'$F4',I2'&REST' + MEND + MACRO +&lab longm +&lab ANOP + rep #%00100000 + longa on + MEND + MACRO +&lab shortm +&lab ANOP + sep #%00100000 + longa off + MEND + MACRO +&lab _WriteGS ¶ms +&lab jsl $E100A8 + dc i2"$2013" + dc i4"¶ms" + MEND diff --git a/source/twilight/nm/delta/macros/udelta.macs b/source/twilight/nm/delta/macros/udelta.macs new file mode 100644 index 0000000..46cd4e0 --- /dev/null +++ b/source/twilight/nm/delta/macros/udelta.macs @@ -0,0 +1,120 @@ + MACRO +&lab _CloseGS ¶ms +&lab jsl $E100A8 + dc i2"$2014" + dc i4"¶ms" + MEND + MACRO +&lab _OpenGS ¶ms +&lab jsl $E100A8 + dc i2"$2010" + dc i4"¶ms" + MEND + MACRO +&lab _ReadGS ¶ms +&lab jsl $E100A8 + dc i2"$2012" + dc i4"¶ms" + MEND + MACRO +&lab _WriteGS ¶ms +&lab jsl $E100A8 + dc i2"$2013" + dc i4"¶ms" + MEND + MACRO +&lab _DisposeHandle +&lab ldx #$1002 + jsl $E10000 + MEND + MACRO +&lab _MMStartUp +&lab ldx #$0202 + jsl $E10000 + MEND + MACRO +&lab _NewHandle +&lab ldx #$0902 + jsl $E10000 + MEND + MACRO +&lab WordResult +&lab pha + MEND + MACRO +&lab LongResult +&lab pha + pha + MEND + MACRO +&lab mov &num1,&num2 +&lab lda &num1 + sta &num2 + MEND + MACRO +&lab pushlong &addr,&offset +&lab ANOP + LCLC &C + LCLC &REST +&C AMID &addr,1,1 + AIF "&C"="#",.immediate + AIF "&C"="[",.zeropage + AIF C:&offset=0,.nooffset + AIF "&offset"="s",.stack + pushword &addr+2,&offset + pushword &addr,&offset + MEXIT +.nooffset + pushword &addr+2 + pushword &addr + MEXIT +.immediate +&REST AMID &addr,2,L:&addr-1 + dc I1'$F4',I2'(&REST)|-16' + dc I1'$F4',I2'&REST' + MEXIT +.stack + pushword &addr+2,s + pushword &addr+2,s + MEXIT +.zeropage + ldy #&offset+2 + pushword &addr,y + ldy #&offset + pushword &addr,y + MEND + MACRO +&lab pushword &SYSOPR +&lab ANOP + AIF C:&SYSOPR=0,.b + LCLC &C +&C AMID "&SYSOPR",1,1 + AIF ("&C"="#").AND.(S:LONGA),.immediate + lda &SYSOPR + pha + MEXIT +.b + pha + MEXIT +.immediate + LCLC &REST + LCLA &BL +&BL ASEARCH "&SYSOPR"," ",1 + AIF &BL>0,.a +&BL SETA L:&SYSOPR+1 +.a +&REST AMID "&SYSOPR",2,&BL-2 + dc I1'$F4',I2'&REST' + MEND + MACRO +&lab longm +&lab ANOP + rep #%00100000 + longa on + MEND + MACRO +&lab shortm +&lab ANOP + sep #%00100000 + longa off + MEND diff --git a/source/twilight/nm/delta/makefile b/source/twilight/nm/delta/makefile new file mode 100644 index 0000000..7357997 --- /dev/null +++ b/source/twilight/nm/delta/makefile @@ -0,0 +1,19 @@ +object/deltac.root: delta.cc + compile -t -e delta.cc Keep=object/deltac + +object/deltaa.root: delta.asm + compile -t -e delta.asm Keep=object/deltaa + +delta: object/deltac.root object/deltaa.root + link -x object/deltac object/deltaa Keep=delta + chtyp -t exe delta + +object/udeltac.root: udelta.cc + compile -t -e udelta.cc Keep=object/udeltac + +object/udeltaa.root: udelta.asm + compile -t -e udelta.asm Keep=object/udeltaa + +udelta: object/udeltac.root object/udeltaa.root + link -x object/udeltac object/udeltaa Keep=udelta + chtyp -t exe udelta diff --git a/source/twilight/nm/delta/makemacs b/source/twilight/nm/delta/makemacs new file mode 100644 index 0000000..6896ab6 --- /dev/null +++ b/source/twilight/nm/delta/makemacs @@ -0,0 +1,2 @@ +macgen delta.asm macros/delta.macs macros/delta.macs 18/m16= +macgen udelta.asm macros/udelta.macs macros/udelta.macs 18/m16= diff --git a/source/twilight/nm/delta/udelta.asm b/source/twilight/nm/delta/udelta.asm new file mode 100644 index 0000000..4f38a33 --- /dev/null +++ b/source/twilight/nm/delta/udelta.asm @@ -0,0 +1,245 @@ +* +* Asm part of delta cruncher. +* By Nathan Mates, 2/12/94 +* +* Reads in file, crunches it, and writes it back to disk. +* +* + + mcopy macros/udelta.macs + + copy 18:e16.memory + copy 18:e16.gsos + + +Temp gequ 1 +LastVal gequ 5 + + case on +* +* +DoDelta start +* +* Does the delta compression stuff... +* +* + case off + using Globals + + phk + phk + plb + lda 4+1,s + sta InString + lda 6+1,s + sta InString+2 + phd + pha + pha + pha + tsc + tcd + stz Err + jsr loadit + lda Err + bne Exit + jsr DeltaIt ;don't bother delta'ing if had error in loading + jsr saveit +Exit pla + pla + pla + lda Err ;error code to be returned + pld + lda 1,s + sta 5,s + lda 3,s + sta 7,s + plx + plx ;clean up off stack + plb + rtl + end + +* +* +Globals data +* +* Asm globals +* +* +gReadRec dc i'4' ;pCount +gReadRefNum ds 2 ;input +gReadPtr ds 4 ;where to load ptr +gReadSize ds 4 ;load $8000 bytes of data + ds 4 ;how many bytes were loaded + +gCloseRec dc i'1' ;pCount +gCloseRefNum ds 2 ;refNum to close + +gOpenRecGS anop + dc i'12' ;pCount +gOpenRefNum ds 2 ;output + dc i4'CStringBuf' ;ptr to pathname + dc i'readwriteEnable' ;we'll need read & write access... + dc i'$0000' ;open data fork + ds 2 ;returned access +gOpenFileType ds 2 ;returned file type + ds 4 ;returned aux + ds 2 ;returned storage type + ds 8 ;returned create time + ds 8 ;returned mod time + dc i4'0' ;optionlist ptr +gOpenEOF ds 4 ;data fork's eof + +Err ds 2 +InString ds 4 + +CStringBuf ds 500 ;enough for most pathnames +LoadHndl ds 4 + + end + + +* +* +LoadIt start +* +* Loads the picture in from disk... +* +* + using Globals + + stz LoadHndl + stz LoadHndl+2 + + mov InString,Temp + mov InString+2,temp+2 ;move ptr to c-string in to DP loc... + + shortm + ldy #0 +C2OSStr lda [Temp],y + sta CStringBuf+2,y + beq DoneCopy + iny + cpy #498 + blt C2OSStr +DoneCopy sty CStringBuf + longm + + _OpenGS gOpenRecGS + bcs IOErr + + lda gOpenRefNum + sta gReadRefNum + sta gCloseRefNum + + LongResult + lda gOpenEOF+2 + sta gReadSize+2 + pha + lda gOpenEOF + sta gReadSize + pha ;size/4 + WordResult + _MMStartup ;get my memory ID + PushWord #attrNoPurge+attrLocked ;locked until we dump things in it + PushLong #0 ;@loc + _NewHandle + plx + ply + bcs CloseErr ;store error message & close file + + stx LoadHndl + sty LoadHndl+2 + stx Temp + sty Temp+2 + lda [temp] + tax + ldy #2 + lda [temp],y + sta gReadPtr+2 + stx gReadPtr + + _ReadGS gReadRec + bcc CloseIt +CloseErr sta Err +CloseIt _CloseGS gCloseRec + rts + +IOErr sta Err + rts + end + +* +* +DeltaIt start +* +* Delta's the file... +* +* + using Globals + mov gReadPtr,temp ;ptr to start + mov gReadPtr+2,temp+2 + + stz Count + stz Count+2 + shortm + lda [temp] + sta LastVal +NextByte longm + inc temp ;increment 32 bit address... + bne NextCount + inc temp+2 ;bump high word too, it seems +NextCount inc Count + bne ChkEnd + inc Count+2 +ChkEnd lda Count+2 + cmp gReadSize+2 ;how do the high words compare? + blt GetDelta ;don't match yet. can keep going + lda Count + cmp gReadSize +* beq GetDelta ;if low words =, on last byte (do it also) + bge Done ;low words >=, so time to quit + +GetDelta lda #0 ;clear all bits + shortm + lda [temp] + clc + adc LastVal ;make by knowing delta from last byte + sta [temp] + sta LastVal + bra NextByte + +Done longm + rts + +Count ds 4 + end + +* +* +SaveIt start +* +* Loads the picture in from disk... +* +* + using Globals + + _OpenGS gOpenRecGS + bcs IOErr + + lda gOpenRefNum + sta gReadRefNum + sta gCloseRefNum + + _WriteGS gReadRec + bcc CloseIt +CloseErr sta Err +CloseIt _CloseGS gCloseRec +DumpHandle PushLong LoadHndl + _DisposeHandle ;dump the handle we allocated + rts + +IOErr sta Err + bra DumpHandle + end \ No newline at end of file diff --git a/source/twilight/nm/delta/udelta.cc b/source/twilight/nm/delta/udelta.cc new file mode 100644 index 0000000..96c7657 --- /dev/null +++ b/source/twilight/nm/delta/udelta.cc @@ -0,0 +1,45 @@ +#include +#pragma lint -1 +#pragma optimize -1 + +/* + * Fcn prototype for asm subroutine that does 90% of the work + * + */ + +int DoDelta (char *filename); + +/* + * C language preprocessor for + * delta engine... gets the command line args and all + * + */ + +int main (int argc, char *argv[]) +{ + int i; + int err=0; + int count; + +/* printf("Number of args=%d\n",argc); + printf("Command name:'%s \n", argv[0]); + for (i=1;i=2) + { + for (count=1;count