home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol018 / banzai.asm < prev    next >
Assembly Source File  |  1984-04-29  |  8KB  |  423 lines

  1. ;                     BANZAI.ASM Ver.1.1
  2. ;                          as of
  3. ;                     September 3, 1980
  4. ;  So  you  have embedded your copyright notice in your  pride 
  5. ; and joy (3000 hours, 'till 3 in the morning "super program") 
  6. ; and  have  even included serial numbers  to  discourage  the 
  7. ; "rip-off"  artists...Great,  the "rip-off" artist takes your 
  8. ; ".COM" file and puts DDT or SID to work on it,  and calls it 
  9. ; his/hers...Oh well...but WAIT...there is HOPE.
  10. ;  Include  BANZAI in your source file,  reassemble  with  the 
  11. ; appropriate copyright notice and serial number, and wait for 
  12. ; the  fireworks...ANY ATTEMPT to corrupt either the copyright 
  13. ; notice  or the serial number,  will "scramble" your file  so 
  14. ; bad  on  the  disk,  that  it  will  never  be  figured  out 
  15. ; again...In  addition,  any remnent parts of the  program  in 
  16. ; memory  are  also  "clobberd",  so back-tracking  is  nearly 
  17. ; impossible...a fitting justice to the "rip-off" artist.
  18. ;  Digital  Research's  macro assemble "MAC"  is  required  to 
  19. ; assemble "BANZAI.ASM".
  20. ;                          Best regards,
  21. ;      
  22. ;                          Kelly Smith, CP/M-NET (tm)
  23. ;                          805-527-9321 (Modem, 300 Baud)
  24. ;                          805-527-0518 (Verbal)
  25. ;
  26. ;DEFINE DATA MOVE MACRO: MOVE FROM,TO,LENGTH FROM MAY BE ADDR, OR QUOTED STRING
  27. ;
  28. MOVE    MACRO    ?F,?T,?L
  29.     IF    NOT NUL ?F
  30.     IRPC    ?C,?F
  31. ?Q    SET    '&?C&?C' ;;TEST FOR QUOTE
  32.     EXITM
  33.     ENDM
  34.     IF    ?Q EQ ''''
  35.     LOCAL    ?B,?Z
  36.     CALL    ?Z
  37. ?B    DB    ?F
  38. ?Z    POP    H    ;GET FROM
  39.     LXI    B,?Z-?B    ;GET LEN
  40.     ELSE
  41.     LXI    H,?F
  42.     ENDIF
  43.     ENDIF
  44.     IF    NOT NUL ?T
  45.     LXI    D,?T
  46.     ENDIF
  47.     IF    NOT NUL ?L
  48.     LXI    B,?L
  49.     ENDIF
  50.     CALL    MOVER
  51.     ENDM
  52. ;
  53. ;DEFINE CP/M MACRO - CPM FNC,PARM
  54. ;
  55. CPM    MACRO    ?F,?P
  56.     PUSH    B
  57.     PUSH    D
  58.     PUSH    H
  59.     IF    NOT NUL ?F
  60.     MVI    C,?F
  61.     ENDIF
  62.     IF    NOT NUL ?P
  63.     LXI    D,?P
  64.     ENDIF
  65.     CALL    BDOS
  66.     POP    H
  67.     POP    D
  68.     POP    B
  69.     ENDM
  70.  
  71.  
  72. ;
  73. LXIH    EQU    021H    ;DEFINE LXI H,XX TO CONFUSE DISASSEMBLERS
  74. ;
  75.  
  76.     ORG    100H
  77. ;
  78. ; INITIALIZE LOCAL STACK
  79. STARTZ:LXI    H,0
  80.     DAD    SP
  81.     SHLD    STACK
  82.     LXI    SP,STACK
  83. ; START OF PROGRAM EXECUTION
  84.  
  85. START:    JMP    BEGIN    ; JUMP OVER COPYRIGHT NOTICE AND SERIAL NUMBER
  86.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  87.  
  88. COPY$RIGHT:
  89.  
  90.     DB    ' Copyright 1980, by Microcosm Associates '
  91. SERIAL$NUMBER:
  92.  
  93.     DB    'UAC15234'
  94.  
  95. BEGIN:    JMP    GET$COPYRIGHT
  96.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  97. INSTR:    MOV    A,B
  98.     SUB    C
  99.     CMC
  100.     RNC
  101.     MOV    B,A
  102. INSTR1:    PUSH    B
  103.     PUSH    D
  104.     PUSH    H
  105.     JMP    GET$MATCH
  106.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  107. MATCH:    INR    C
  108. MATCH1:    DCR    C
  109.     RZ
  110.     LDAX    D
  111.     ANI    07FH    ;REVEAL HIDDEN TEXT
  112.     SUB    M
  113.     RNZ
  114.     INX    H
  115.     INX    D
  116.     JMP    MATCH1
  117.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  118. GET$MATCH:
  119.     CALL    MATCH
  120.     POP    H
  121.     POP    D
  122.     POP    B
  123.     JZ    MATCH$OK
  124.     ANA    A
  125.     DCR    B
  126.     RM
  127.     INX    H
  128.     JMP    INSTR1
  129.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  130. MATCH$OK:
  131.     MVI    B,0
  132.     DAD    B
  133.     STC
  134.     RET
  135.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  136. GET$COPYRIGHT:
  137.     LXI    H,COPY$RIGHT
  138.     MVI    B,40H
  139.     MVI    C,CHECK$COPYRIGHT-HIDDEN$COPYRIGHT
  140.     LXI    D,HIDDEN$COPYRIGHT
  141.     CALL    INSTR
  142.     JMP    CHECK$COPYRIGHT
  143.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  144. HIDDEN$COPYRIGHT:
  145.     DB    ' '+80H
  146.     DB    'C'+80H
  147.     DB    'o'+80H
  148.     DB    'p'+80H
  149.     DB    'y'+80H
  150.     DB    'r'+80H
  151.     DB    'i'+80H
  152.     DB    'g'+80H
  153.     DB    'h'+80H
  154.     DB    't'+80H
  155.     DB    ' '+80H
  156.     DB    '1'+80H
  157.     DB    '9'+80H
  158.     DB    '8'+80H
  159.     DB    '0'+80H
  160.     DB    ','+80H
  161.     DB    ' '+80H
  162.     DB    'b'+80H
  163.     DB    'y'+80H
  164.     DB    ' '+80H
  165.     DB    'M'+80H
  166.     DB    'i'+80H
  167.     DB    'c'+80H
  168.     DB    'r'+80H
  169.     DB    'o'+80H
  170.     DB    'c'+80H
  171.     DB    'o'+80H
  172.     DB    's'+80H
  173.     DB    'm'+80H
  174.     DB    ' '+80H
  175.     DB    'A'+80H
  176.     DB    's'+80H
  177.     DB    's'+80H
  178.     DB    'o'+80H
  179.     DB    'c'+80H
  180.     DB    'i'+80H
  181.     DB    'a'+80H
  182.     DB    't'+80H
  183.     DB    'e'+80H
  184.     DB    's'+80H
  185.     DB    ' '+80H
  186. CHECK$COPYRIGHT:
  187.     JNC    BANZAI    ; BANZAI FILE, IF COPYRIGHT CORRUPTED
  188.     LXI    H,SERIAL$NUMBER
  189.     MVI    B,40H
  190.     MVI    C,CHECK$SERIAL$NUMBER-HIDDEN$SERIAL$NUMBER
  191.     LXI    D,HIDDEN$SERIAL$NUMBER
  192.     CALL    INSTR
  193.     JMP    CHECK$SERIAL$NUMBER
  194.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  195. HIDDEN$SERIAL$NUMBER:
  196.     DB    'U'+80H
  197.     DB    'A'+80H
  198.     DB    'C'+80H
  199.     DB    '1'+80H
  200.     DB    '5'+80H
  201.     DB    '2'+80H
  202.     DB    '3'+80H
  203.     DB    '4'+80H
  204. CHECK$SERIAL$NUMBER:
  205.     JNC    BANZAI    ; BANZAI FILE, IF SERIAL NUMBER CORRUPTED
  206.     JMP    NOBANZAI; EXIT, FOR PURPOSES OF DEMO...
  207.             ; ...NORMAL EXECUTION OF FILE WOULD CONTINUE
  208.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  209.  
  210. BANZAI:            ; BANZAI THE SPECIFIED FILE IN "TFCB"
  211.  
  212. ; SCRAMBLE A WHILE TO MIX UP THE SEED
  213.     MVI    H,0    ; GET 256 #'S
  214. MIXUP:    CALL    PSEURAN    ; GET A #
  215.     DCR    H    ; MORE?
  216.     JNZ    MIXUP    ; LOOP IF SO
  217. ;
  218. ;GET LOGGED IN DRIVE NUMBER
  219. ;
  220.     LDA    FCB    ; GET FROM "JUST LOADED" FILENAME
  221.     STA    TFCB    ; AND SAVE IN TEMPORARY FCB
  222. ; SEE THAT THE INPUT FILE EXISTS
  223.     CPM    OPEN,TFCB
  224.     INR    A    ; OK?
  225.     JNZ    SCRAMLP    ; YES, SCRAMBLE IT
  226.     CALL    ERXIT
  227.     DB    '++NO SUCH FILE++$'
  228.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  229. ; READ THE FILE, SCRAMBLE A SECTOR, RE-WRITE IT.
  230. SCRAMLP:CALL    RDSECT    ; READ A SECTOR
  231.     JC    FINISH    ; EXIT LOOP IF EOF
  232.     CALL    SCRAMBL    ; SCRAMBLE IT
  233.     CALL    BACKUP    ; RE-POSITION FOR WRITE
  234.     CALL    WRSECT    ; RE-WRITE THE SECTOR
  235.     JMP    SCRAMLP    ; LOOP UNTIL EOF
  236.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  237. FINISH:    CPM    CLOSE,TFCB
  238.     JMP    EXIT    ; THIS BETTER WORK..
  239.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  240. ; SECTOR READ ROUTINE
  241. RDSECT:    CPM    READ,TFCB
  242.     ORA    A
  243.     RZ        ; ALL OK
  244. ; READ ERROR OR EOF
  245.     CPI    1    ; EOF?
  246.     STC        ; CARRY SHOWS EOF
  247.     RZ        ; RET, CARRY SET
  248.     JMP    EXIT    ; GREAT, A READ ERROR MAY HAVE BANZAI'D THE FILE
  249.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  250. ; SCRAMBLE THE SECTOR
  251. SCRAMBL:LXI    H,80H    ; POINT TO SECTOR
  252. SCRLP:    CALL    PSEURAN    ; GET PSEUDO RANDOM #
  253.     XRA    M    ; SCRAMBLE
  254.     MOV    M,A
  255.     INR    L    ; MORE IN SECTOR?
  256.     JNZ    SCRLP
  257.     RET
  258.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  259. ; BACKUP THE FILE POINTER FOR THE RE-WRITE
  260. BACKUP:    LDA    FCBRNO    ; GET SECTOR #
  261.     DCR    A    ; BACK UP
  262.     STA    FCBRNO
  263.     RP        ; RETURN IF OK
  264. ; WE BACKED UP INTO PREVIOUS EXTENT, WILL HAVE TO RE-OPEN IT
  265.     LDA    FCBEXT    ; GET EXTENT
  266.     DCR    A    ; BACK UP 1
  267.     STA    FCBEXT
  268.     CPM    OPEN,TFCB ; RE-OPEN
  269.     INR    A
  270.     JNZ    OPEN2OK
  271.     JMP    EXIT    ; GREAT, OPEN ERROR MAY HAVE BANZAI'D THE FILE
  272.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  273. OPEN2OK:MVI    A,7FH    ; GET HI SECTOR
  274.     STA    FCBRNO
  275.     RET
  276.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  277. ; WRITE BACK THE SECTOR
  278. WRSECT:    CPM    WRITE,TFCB
  279.     ORA    A
  280.     RZ
  281.     JMP    EXIT    ; GREAT, WRITE ERROR MAY HAVE BANZAI'D THE FILE
  282.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  283. ; GET A PSEUDO-RANDOM 8 BIT NUMBER USING THE PASSWORD AS A SEED
  284. ;     FOR SPEED, THIS ROUTINE DOES NO REGISTER
  285. ;     PUSHES AND POPS, HOWEVER HL AREN'T USED.
  286. PSEURAN:MVI    C,4    ; GRAB EVERY 4TH PSEU. #
  287. PSEULP0:MVI    B,8    ; SHIFT THRU 8 BYTES
  288.     LXI    D,PASSWD
  289.     ORA    A    ; CLEAR INITIAL CARRY
  290. PSEULP1:LDAX    D    ; GET A CHAR
  291.     RAR        ; SHIFT
  292.     STAX    D
  293.     INX    D
  294.     DCR    B
  295.     JNZ    PSEULP1
  296. ; EXCLUSIVE-OR THE LAST FEW BITS INTO THE FIRST ONE
  297.     DCX    D    ; BACK UP TO LAST
  298.     RAR
  299.     RAR        ; SHIFT A FEW MORE
  300.     XCHG
  301.     XRA    M
  302.     RRC        ; SHIFT LO BIT INTO HI
  303.     ANI    80H    ; ISOLATE SINGLE BIT
  304.     LXI    H,PASSWD ; GET FIRST BYTE
  305.      ORA    M    ; 'OR' IN THE BIT
  306.     MOV    M,A    ; MOVE IT BACK
  307.     XCHG        ; RESTORE HL
  308.     DCR    C
  309.     JNZ    PSEULP0    ; LOOP IF MORE PASSES
  310.     RET
  311.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  312. ; MOVE SUBROUTINES
  313. MOVER:    MOV    A,M
  314.     STAX    D
  315.     INX    H
  316.     INX    D
  317.     DCX    B
  318.     MOV    A,B
  319.     ORA    C
  320.     JNZ    MOVER
  321.     RET
  322.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  323. ; EXIT WITH ERROR MESSAGE
  324. MSGEXIT    EQU    $    ; EXIT WITH MESSAGE
  325. ERXIT:    POP    D    ; GET MSG
  326.     MVI    C,PRNSTRG
  327.     CALL    BDOS
  328. ; EXIT, CLOBBER MEMORY, RESTORE STACK, AND RETURN (HEH, HEH...)
  329. ENDZ    EQU    $        ; END OF MEMORY TO BE CLOBBERD
  330. EXIT:    LXI    B,ENDZ-STARTZ    ; GET BYTE NUMBER TO CLOBBER
  331.     LXI    H,STARTZ    ; POINT TO START OF CLOBBER
  332. CLOBBER:MOV    M,A        ; DO IT...TO IT...
  333.     INX    H
  334.     DCX    B
  335.     MOV    A,B
  336.     ORA    C
  337.     JNZ    CLOBBER        ; CLOBBER ALL...
  338. NOBANZAI:            ; NO BANZAI REQUIRED...
  339.     LHLD    STACK
  340.     SPHL
  341.     RET        ; RETURN TO CP/M
  342.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  343.  
  344. PASSWD:    DB    'KILLFILE'
  345.     DB    LXIH    ;CONFUSE DISASSEMBLERS
  346.  
  347. TFCB:    DB    0,'BANZAI  COM',0,0,0,0
  348.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  349.     DB    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  350.  
  351.     DS    128    ; STACK AREA
  352. STACK    DS    2
  353.  
  354. ;
  355. ; BDOS/CBIOS EQUATES (VERSION 7)    
  356. ;
  357. RDCON    EQU    1
  358. WRCON    EQU    2
  359. PRNSTRG    EQU    9
  360. CONST    EQU    11
  361. OPEN    EQU    15
  362. CLOSE    EQU    16
  363. SRCHF    EQU    17
  364. SRCHN    EQU    18
  365. ERASE    EQU    19
  366. READ    EQU    20
  367. WRITE    EQU    21
  368. MAKE    EQU    22
  369. REN    EQU    23
  370. STDMA    EQU    26
  371. BDOS    EQU    5
  372. FCB    EQU    5CH 
  373. FCB2    EQU    6CH
  374. FCBEXT    EQU    TFCB+12
  375. FCBRNO    EQU    TFCB+32
  376.  
  377.     END
  378.