home *** CD-ROM | disk | FTP | other *** search
- ;
- ;
- ; BANZAI.ASM Ver.1.1
- ;
- ; as of
- ;
- ; September 3, 1980
- ;
- ; So you have embedded your copyright notice in your pride
- ; and joy (3000 hours, 'till 3 in the morning "super program")
- ; and have even included serial numbers to discourage the
- ; "rip-off" artists...Great, the "rip-off" artist takes your
- ; ".COM" file and puts DDT or SID to work on it, and calls it
- ; his/hers...Oh well...but WAIT...there is HOPE.
- ;
- ; Include BANZAI in your source file, reassemble with the
- ; appropriate copyright notice and serial number, and wait for
- ; the fireworks...ANY ATTEMPT to corrupt either the copyright
- ; notice or the serial number, will "scramble" your file so
- ; bad on the disk, that it will never be figured out
- ; again...In addition, any remnent parts of the program in
- ; memory are also "clobberd", so back-tracking is nearly
- ; impossible...a fitting justice to the "rip-off" artist.
- ;
- ; Digital Research's macro assemble "MAC" is required to
- ; assemble "BANZAI.ASM".
- ;
- ;
- ; Best regards,
- ;
- ; Kelly Smith, CP/M-NET (tm)
- ; 805-527-9321 (Modem, 300 Baud)
- ; 805-527-0518 (Verbal)
- ;
- ;
- ;
- ;DEFINE DATA MOVE MACRO: MOVE FROM,TO,LENGTH FROM MAY BE ADDR, OR QUOTED STRING
- ;
- MOVE MACRO ?F,?T,?L
- IF NOT NUL ?F
- IRPC ?C,?F
- ?Q SET '&?C&?C' ;;TEST FOR QUOTE
- EXITM
- ENDM
- IF ?Q EQ ''''
- LOCAL ?B,?Z
- CALL ?Z
- ?B DB ?F
- ?Z POP H ;GET FROM
- LXI B,?Z-?B ;GET LEN
- ELSE
- LXI H,?F
- ENDIF
- ENDIF
- IF NOT NUL ?T
- LXI D,?T
- ENDIF
- IF NOT NUL ?L
- LXI B,?L
- ENDIF
- CALL MOVER
- ENDM
- ;
- ;DEFINE CP/M MACRO - CPM FNC,PARM
- ;
- CPM MACRO ?F,?P
- PUSH B
- PUSH D
- PUSH H
- IF NOT NUL ?F
- MVI C,?F
- ENDIF
- IF NOT NUL ?P
- LXI D,?P
- ENDIF
- CALL BDOS
- POP H
- POP D
- POP B
- ENDM
-
-
- ;
- LXIH EQU 021H ;DEFINE LXI H,XX TO CONFUSE DISASSEMBLERS
- ;
-
- ORG 100H
- ;
- ; INITIALIZE LOCAL STACK
- ;
- STARTZ:LXI H,0
- DAD SP
- SHLD STACK
- LXI SP,STACK
- ;
- ; START OF PROGRAM EXECUTION
-
- START: JMP BEGIN ; JUMP OVER COPYRIGHT NOTICE AND SERIAL NUMBER
- DB LXIH ;CONFUSE DISASSEMBLERS
-
- COPY$RIGHT:
-
- DB ' Copyright 1980, by Microcosm Associates '
- SERIAL$NUMBER:
-
- DB 'UAC15234'
-
- BEGIN: JMP GET$COPYRIGHT
- DB LXIH ;CONFUSE DISASSEMBLERS
- INSTR: MOV A,B
- SUB C
- CMC
- RNC
- MOV B,A
- INSTR1: PUSH B
- PUSH D
- PUSH H
- JMP GET$MATCH
- DB LXIH ;CONFUSE DISASSEMBLERS
- MATCH: INR C
- MATCH1: DCR C
- RZ
- LDAX D
- ANI 07FH ;REVEAL HIDDEN TEXT
- SUB M
- RNZ
- INX H
- INX D
- JMP MATCH1
- DB LXIH ;CONFUSE DISASSEMBLERS
- GET$MATCH:
- CALL MATCH
- POP H
- POP D
- POP B
- JZ MATCH$OK
- ANA A
- DCR B
- RM
- INX H
- JMP INSTR1
- DB LXIH ;CONFUSE DISASSEMBLERS
- MATCH$OK:
- MVI B,0
- DAD B
- STC
- RET
- DB LXIH ;CONFUSE DISASSEMBLERS
- GET$COPYRIGHT:
- LXI H,COPY$RIGHT
- MVI B,40H
- MVI C,CHECK$COPYRIGHT-HIDDEN$COPYRIGHT
- LXI D,HIDDEN$COPYRIGHT
- CALL INSTR
- JMP CHECK$COPYRIGHT
- DB LXIH ;CONFUSE DISASSEMBLERS
- HIDDEN$COPYRIGHT:
- DB ' '+80H
- DB 'C'+80H
- DB 'o'+80H
- DB 'p'+80H
- DB 'y'+80H
- DB 'r'+80H
- DB 'i'+80H
- DB 'g'+80H
- DB 'h'+80H
- DB 't'+80H
- DB ' '+80H
- DB '1'+80H
- DB '9'+80H
- DB '8'+80H
- DB '0'+80H
- DB ','+80H
- DB ' '+80H
- DB 'b'+80H
- DB 'y'+80H
- DB ' '+80H
- DB 'M'+80H
- DB 'i'+80H
- DB 'c'+80H
- DB 'r'+80H
- DB 'o'+80H
- DB 'c'+80H
- DB 'o'+80H
- DB 's'+80H
- DB 'm'+80H
- DB ' '+80H
- DB 'A'+80H
- DB 's'+80H
- DB 's'+80H
- DB 'o'+80H
- DB 'c'+80H
- DB 'i'+80H
- DB 'a'+80H
- DB 't'+80H
- DB 'e'+80H
- DB 's'+80H
- DB ' '+80H
- CHECK$COPYRIGHT:
- JNC BANZAI ; BANZAI FILE, IF COPYRIGHT CORRUPTED
- LXI H,SERIAL$NUMBER
- MVI B,40H
- MVI C,CHECK$SERIAL$NUMBER-HIDDEN$SERIAL$NUMBER
- LXI D,HIDDEN$SERIAL$NUMBER
- CALL INSTR
- JMP CHECK$SERIAL$NUMBER
- DB LXIH ;CONFUSE DISASSEMBLERS
- HIDDEN$SERIAL$NUMBER:
- DB 'U'+80H
- DB 'A'+80H
- DB 'C'+80H
- DB '1'+80H
- DB '5'+80H
- DB '2'+80H
- DB '3'+80H
- DB '4'+80H
- CHECK$SERIAL$NUMBER:
- JNC BANZAI ; BANZAI FILE, IF SERIAL NUMBER CORRUPTED
- JMP NOBANZAI; EXIT, FOR PURPOSES OF DEMO...
- ; ...NORMAL EXECUTION OF FILE WOULD CONTINUE
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ;
- ;
-
- BANZAI: ; BANZAI THE SPECIFIED FILE IN "TFCB"
-
- ;
- ; SCRAMBLE A WHILE TO MIX UP THE SEED
- ;
- MVI H,0 ; GET 256 #'S
- MIXUP: CALL PSEURAN ; GET A #
- DCR H ; MORE?
- JNZ MIXUP ; LOOP IF SO
- ;
- ;GET LOGGED IN DRIVE NUMBER
- ;
- LDA FCB ; GET FROM "JUST LOADED" FILENAME
- STA TFCB ; AND SAVE IN TEMPORARY FCB
- ;
- ; SEE THAT THE INPUT FILE EXISTS
- ;
- CPM OPEN,TFCB
- INR A ; OK?
- JNZ SCRAMLP ; YES, SCRAMBLE IT
- CALL ERXIT
- DB '++NO SUCH FILE++$'
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; READ THE FILE, SCRAMBLE A SECTOR, RE-WRITE IT.
- ;
- SCRAMLP:CALL RDSECT ; READ A SECTOR
- JC FINISH ; EXIT LOOP IF EOF
- CALL SCRAMBL ; SCRAMBLE IT
- CALL BACKUP ; RE-POSITION FOR WRITE
- CALL WRSECT ; RE-WRITE THE SECTOR
- JMP SCRAMLP ; LOOP UNTIL EOF
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ;
- FINISH: CPM CLOSE,TFCB
- JMP EXIT ; THIS BETTER WORK..
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; SECTOR READ ROUTINE
- ;
- RDSECT: CPM READ,TFCB
- ORA A
- RZ ; ALL OK
- ;
- ; READ ERROR OR EOF
- ;
- CPI 1 ; EOF?
- STC ; CARRY SHOWS EOF
- RZ ; RET, CARRY SET
- JMP EXIT ; GREAT, A READ ERROR MAY HAVE BANZAI'D THE FILE
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; SCRAMBLE THE SECTOR
- ;
- SCRAMBL:LXI H,80H ; POINT TO SECTOR
- SCRLP: CALL PSEURAN ; GET PSEUDO RANDOM #
- XRA M ; SCRAMBLE
- MOV M,A
- INR L ; MORE IN SECTOR?
- JNZ SCRLP
- RET
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; BACKUP THE FILE POINTER FOR THE RE-WRITE
- ;
- BACKUP: LDA FCBRNO ; GET SECTOR #
- DCR A ; BACK UP
- STA FCBRNO
- RP ; RETURN IF OK
- ;
- ; WE BACKED UP INTO PREVIOUS EXTENT, WILL HAVE TO RE-OPEN IT
- ;
- LDA FCBEXT ; GET EXTENT
- DCR A ; BACK UP 1
- STA FCBEXT
- CPM OPEN,TFCB ; RE-OPEN
- INR A
- JNZ OPEN2OK
- JMP EXIT ; GREAT, OPEN ERROR MAY HAVE BANZAI'D THE FILE
- DB LXIH ;CONFUSE DISASSEMBLERS
- OPEN2OK:MVI A,7FH ; GET HI SECTOR
- STA FCBRNO
- RET
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; WRITE BACK THE SECTOR
- ;
- WRSECT: CPM WRITE,TFCB
- ORA A
- RZ
- JMP EXIT ; GREAT, WRITE ERROR MAY HAVE BANZAI'D THE FILE
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; GET A PSEUDO-RANDOM 8 BIT NUMBER USING THE PASSWORD AS A SEED
- ;
- ; FOR SPEED, THIS ROUTINE DOES NO REGISTER
- ; PUSHES AND POPS, HOWEVER HL AREN'T USED.
- ;
- PSEURAN:MVI C,4 ; GRAB EVERY 4TH PSEU. #
- PSEULP0:MVI B,8 ; SHIFT THRU 8 BYTES
- LXI D,PASSWD
- ORA A ; CLEAR INITIAL CARRY
- PSEULP1:LDAX D ; GET A CHAR
- RAR ; SHIFT
- STAX D
- INX D
- DCR B
- JNZ PSEULP1
- ; EXCLUSIVE-OR THE LAST FEW BITS INTO THE FIRST ONE
- DCX D ; BACK UP TO LAST
- RAR
- RAR ; SHIFT A FEW MORE
- XCHG
- XRA M
- RRC ; SHIFT LO BIT INTO HI
- ANI 80H ; ISOLATE SINGLE BIT
- LXI H,PASSWD ; GET FIRST BYTE
- ORA M ; 'OR' IN THE BIT
- MOV M,A ; MOVE IT BACK
- XCHG ; RESTORE HL
- DCR C
- JNZ PSEULP0 ; LOOP IF MORE PASSES
- RET
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; MOVE SUBROUTINES
- ;
- MOVER: MOV A,M
- STAX D
- INX H
- INX D
- DCX B
- MOV A,B
- ORA C
- JNZ MOVER
- RET
- DB LXIH ;CONFUSE DISASSEMBLERS
- ;
- ; EXIT WITH ERROR MESSAGE
- ;
- MSGEXIT EQU $ ; EXIT WITH MESSAGE
- ERXIT: POP D ; GET MSG
- MVI C,PRNSTRG
- CALL BDOS
- ;
- ; EXIT, CLOBBER MEMORY, RESTORE STACK, AND RETURN (HEH, HEH...)
- ;
- ENDZ EQU $ ; END OF MEMORY TO BE CLOBBERD
- EXIT: LXI B,ENDZ-STARTZ ; GET BYTE NUMBER TO CLOBBER
- LXI H,STARTZ ; POINT TO START OF CLOBBER
- CLOBBER:MOV M,A ; DO IT...TO IT...
- INX H
- DCX B
- MOV A,B
- ORA C
- JNZ CLOBBER ; CLOBBER ALL...
- NOBANZAI: ; NO BANZAI REQUIRED...
- LHLD STACK
- SPHL
- RET ; RETURN TO CP/M
- DB LXIH ;CONFUSE DISASSEMBLERS
-
- PASSWD: DB 'KILLFILE'
- DB LXIH ;CONFUSE DISASSEMBLERS
-
- TFCB: DB 0,'BANZAI COM',0,0,0,0
- DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
- DS 128 ; STACK AREA
- STACK DS 2
-
- ;
- ; BDOS/CBIOS EQUATES (VERSION 7)
- ;
- RDCON EQU 1
- WRCON EQU 2
- PRNSTRG EQU 9
- CONST EQU 11
- OPEN EQU 15
- CLOSE EQU 16
- SRCHF EQU 17
- SRCHN EQU 18
- ERASE EQU 19
- READ EQU 20
- WRITE EQU 21
- MAKE EQU 22
- REN EQU 23
- STDMA EQU 26
- BDOS EQU 5
- FCB EQU 5CH
- FCB2 EQU 6CH
- FCBEXT EQU TFCB+12
- FCBRNO EQU TFCB+32
-
- END
-