.TITLE "SPY 1.0" ; ; SPY 1.0 ; ------- ; Look at label USERCONTROL ; where you can customize ; this spy program. ; ------------------------- ; SAVE #D:SPY.M65 ; ASM ,,#D:SPY9000.COM ; *= $9000 ; DOSINI = $0C ZTMP = $F5 ; SDLSTL = $0230 SDLSTH = $0231 BOOTAD = $0242 COLOR0 = $02C4 ; DDEVIC = $0300 DCOMND = $0302 DSTATS = $0303 DBUFLO = $0304 DBUFHI = $0305 DAUX1 = $030A DAUX2 = $030B ; CONSOL = $D01F COL0 = $D016 DLISTL = $D402 DLISTH = $D403 VCOUNT = $D40B SIOV = $E459 ; PATCHSEC = 364 ADDRSEC = 365 ADDRSEC2 = 366 SECTSEC = 367 SECTSEC2 = 368 LASTSEC = 369 ; ; SPYCORE.M65 contains all ; code that loads spy datas, ; runs boot program, installs ; patches and save memory on ; spy disk. ; MAIN .OPT NO LIST .INCLUDE #D:SPYCORE.M65 .OPT LIST ; ; User patch. ; ----------- ; This part of code is ; executed when a patch ; address is 0. It means ; either that there is no ; more patch or the user ; has put a 0 address to ; do a special task ; between several patches. ; ; At this time, we have ; restored program code ; (no patch), saved ; program registers into ; SAVEREGS and CURPATCH ; points to a 0 address. ; ; We can modify this ; patch so it will do ; something, then JMP to ; USERPATCH or just INC ; twice CURPATCH to get ; to the next patch and ; JMP to USERPATCH. ; ; If nothing has to be ; done, then a JMP to ; USEREND will continue ; the normal operations. ; It will ask for the ; SPY disk to save datas. ; ; LASTPATCH is the address ; where we left off the ; program execution. ; USERCONTROL JMP USEREND ; ; Title colors ; SETCOL .BYTE $18,$0A,$00,$68,$00 ; ; Save screen params ; SAVCOL .BYTE 0,0,0,0,0 SAVDL .WORD 0 CURINDEX .BYTE 0 CURPATCH .BYTE 0 SAVPATCH .WORD 0,0 LASTPATCH .WORD 0 SAVEREGS .BYTE 0,0,0,0 ; ; Display list to prompt user ; to insert program disk ; DLISTSPY .BYTE $70,$70,$70,$47 .WORD SPYTITLE .BYTE $70,$46 TITLE .WORD PRGSTATUS .BYTE $70,$70,$70,$70 .BYTE $70,$70,$70,$42 PROMPT .WORD SPYPROMPT .BYTE $70,$46 .WORD PRGSTATUS .BYTE $41 .WORD DLISTSPY ; SPYTITLE .SBYTE "σπω δισλ V1.0" .SBYTE " (C) BE" ; PRGPROMPT .SBYTE "Insert boot disk in" .SBYTE " D1: and press" .SBYTE " START." ; SPYPROMPT .SBYTE "Insert ΣΠΩ δισλ in" .SBYTE " D1: and press" .SBYTE " START. " ; PRGSTATUS .SBYTE " " .SBYTE " " ; PATCHNUM .SBYTE " PATCH " PATCHDIGIT .SBYTE "00" .SBYTE " APPLIED " ; WRONGDISK .SBYTE " WRONG" .SBYTE " DISK " ; ERRORMSG .SBYTE "ERROR WHIL" .SBYTE "E WRITTING" ; FINISHED .SBYTE " FINIS" .SBYTE "HED ! " ; ; Get sector command ; GETDATA .BYTE $31,$01,$52,$40 .WORD PATCHDATA,$0A,$80 .WORD PATCHSEC GETLEN = *-GETDATA ; ; Put sector command ; PUTDATA .BYTE $31,$01,$57,$80 .WORD MEMADDR,$40,$80 PUTLEN = *-PUTDATA ; ; Boot sector from prg disk ; BOOTSEC *= *+128 ; ; Parameters read from spy disk ; CHKPATCH *= *+128 PATCHDATA *= *+1 SPYMAGIC *= *+3 PRGNAME *= *+20 PATCHADDR *= *+104 MEMADDR *= *+256 MEMSECTOR *= *+256 ENDSPY ; ; The prg starts at label MAIN ; *= $02E0 ; .WORD MAIN ; ; End of external references ; .END