M100 TS-DOS ROM Compression

From Bitchin100 DocGarden
Jump to: navigation, search

TS-DOS Model 100/102 ROM Compression Routines

This code, as you can see, has not been disassembled yet.

; =========================================================================================
; Compress / Decompress a file a .DO file
; =========================================================================================
5000H  CALL 5008H
5003H  RET

5004H  CALL 500FH
5007H  RET

5008H  XRA A
5009H  STA F69EH
500CH  JMP 5018H


; =========================================================================================
; Perform compression / decompression
; =========================================================================================
500FH  (3EH) MVI A,0CH
5011H  (32H) STA F69EH
5014H  (E7H) RST 4          ; Send character in A to screen/printer
5015H  (CDH) CALL 5347H
5018H  (22H) SHLD F69BH
501BH  (21H) LXI H,534BH
501EH  (11H) LXI D,F685H    ; Keyboard buffer
5021H  (01H) LXI B,0015H
5024H  (CDH) CALL 5318H
5027H  (3EH) MVI A,50H
5029H  (32H) STA F69DH
502CH  (AFH) XRA A
502DH  (32H) STA F69FH
5030H  (CDH) CALL 533BH
5033H  (2AH) LHLD F69BH
5036H  (CDH) CALL 5333H
5039H  (EBH) XCHG
503AH  (D5H) PUSH D
503BH  (CDH) CALL 52ABH
503EH  (00H) NOP
503FH  (2EH) MVI L,7EH
5041H  (C2H) JNZ 5046H
5044H  (2EH) MVI L,80H
5046H  (01H) LXI B,0000H
5049H  (1AH) LDAX D
504AH  (BDH) CMP L
504BH  (DAH) JC 504FH
504EH  (03H) INX B
504FH  (13H) INX D
5050H  (FEH) CPI 1AH
5052H  (C2H) JNZ 5049H
5055H  (E1H) POP H
5056H  (3AH) LDA F69EH
5059H  (D6H) SUI 0CH
505BH  (C2H) JNZ 5060H      ; Generate IE error
505EH  (47H) MOV B,A
505FH  (4FH) MOV C,A
5060H  (CDH) CALL 533FH
5063H  (D8H) RC
5064H  (2BH) DCX H
5065H  (E5H) PUSH H
5066H  (CDH) CALL 52A5H
5069H  (C2H) JNZ 5098H
506CH  (CDH) CALL 52ABH
506FH  (DCH) CC 5307H
5072H  (C3H) JMP 521AH

5075H  (CDH) CALL 5323H
5078H  (DAH) JC 5075H
507BH  (CDH) CALL 5337H
507EH  (C9H) RET

507FH  (4FH) MOV C,A
5080H  (FEH) CPI 3AH
5082H  (D0H) RNC
5083H  (FEH) CPI 20H
5085H  (37H) STC
5086H  (C8H) RZ
5087H  (FEH) CPI 2FH
5089H  (C8H) RZ
508AH  (3FH) CMC
508BH  (C9H) RET

508CH  (D6H) SUI 2FH
508EH  (D0H) RNC
508FH  (3EH) MVI A,0BH
5091H  (C9H) RET

5092H  (FEH) CPI 3AH
5094H  (C0H) RNZ
5095H  (3EH) MVI A,20H
5097H  (C9H) RET

5098H  (D5H) PUSH D
5099H  (00H) NOP
509AH  (00H) NOP
509BH  (01H) LXI B,0000H
509EH  (C5H) PUSH B
509FH  (E1H) POP H
50A0H  (03H) INX B
50A1H  (13H) INX D
50A2H  (1AH) LDAX D
50A3H  (FEH) CPI 5BH
50A5H  (D2H) JNC 50A0H
50A8H  (FEH) CPI 1AH
50AAH  (CAH) JZ 50B7H
50ADH  (FEH) CPI 41H
50AFH  (DAH) JC 50A1H
50B2H  (00H) NOP
50B3H  (23H) INX H
50B4H  (C3H) JMP 50A1H

50B7H  (C5H) PUSH B
50B8H  (D1H) POP D
50B9H  (DFH) RST 3          ; Compare DE and HL
50BAH  (D1H) POP D
50BBH  (DAH) JC 50C6H
50BEH  (CDH) CALL 5307H
50C1H  (3EH) MVI A,43H
50C3H  (32H) STA F69DH
50C6H  (AFH) XRA A
50C7H  (32H) STA F69FH
50CAH  (CDH) CALL 520AH
50CDH  (CDH) CALL 518AH
50D0H  (D2H) JNC 515EH
50D3H  (CDH) CALL 507FH
50D6H  (00H) NOP
50D7H  (D2H) JNC 5117H
50DAH  (13H) INX D
50DBH  (1AH) LDAX D
50DCH  (CDH) CALL 5080H
50DFH  (1BH) DCX D
50E0H  (47H) MOV B,A
50E1H  (79H) MOV A,C
50E2H  (D2H) JNC 5117H
50E5H  (C2H) JNZ 50EEH
50E8H  (B8H) CMP B
50E9H  (CAH) JZ 5136H
50ECH  (00H) NOP
50EDH  (00H) NOP
50EEH  (13H) INX D
50EFH  (21H) LXI H,F69FH
50F2H  (00H) NOP
50F3H  (7EH) MOV A,M
50F4H  (B7H) ORA A
50F5H  (C2H) JNZ 50FFH
50F8H  (3EH) MVI A,7EH
50FAH  (77H) MOV M,A
50FBH  (E1H) POP H
50FCH  (77H) MOV M,A
50FDH  (23H) INX H
50FEH  (E5H) PUSH H
50FFH  (79H) MOV A,C
5100H  (CDH) CALL 508CH
5103H  (00H) NOP
5104H  (4FH) MOV C,A
5105H  (78H) MOV A,B
5106H  (CDH) CALL 508CH
5109H  (C6H) ADI 0BH
510BH  (0DH) DCR C
510CH  (C2H) JNZ 5109H
510FH  (C6H) ADI 7AH
5111H  (E1H) POP H
5112H  (77H) MOV M,A
5113H  (E5H) PUSH H
5114H  (C3H) JMP 50CAH

5117H  (E1H) POP H
5118H  (FEH) CPI 0DH
511AH  (C2H) JNZ 512AH
511DH  (13H) INX D
511EH  (1AH) LDAX D
511FH  (FEH) CPI 0AH
5121H  (1BH) DCX D
5122H  (3EH) MVI A,0DH
5124H  (C2H) JNZ 512AH
5127H  (13H) INX D
5128H  (3EH) MVI A,80H
512AH  (77H) MOV M,A
512BH  (E5H) PUSH H
512CH  (3AH) LDA F69FH
512FH  (B7H) ORA A
5130H  (C2H) JNZ 50C6H
5133H  (00H) NOP
5134H  (00H) NOP
5135H  (7EH) MOV A,M
5136H  (21H) LXI H,F684H
5139H  (06H) MVI B,07H
513BH  (05H) DCR B
513CH  (CAH) JZ 50CAH
513FH  (23H) INX H
5140H  (BEH) CMP M
5141H  (C2H) JNZ 513BH
5144H  (0EH) MVI C,15H
5146H  (CDH) CALL 518AH
5149H  (D2H) JNC 515EH
514CH  (21H) LXI H,F685H    ; Keyboard buffer
514FH  (BEH) CMP M
5150H  (CAH) JZ 517BH
5153H  (0DH) DCR C
5154H  (CCH) CZ 520AH
5157H  (CAH) JZ 5184H
515AH  (23H) INX H
515BH  (C3H) JMP 514FH

515EH  (32H) STA F69AH
5161H  (AFH) XRA A
5162H  (32H) STA F69FH
5165H  (78H) MOV A,B
5166H  (FEH) CPI 07H
5168H  (D2H) JNC 516EH
516BH  (CDH) CALL 520AH
516EH  (E1H) POP H
516FH  (36H) MVI M,FFH
5171H  (E5H) PUSH H
5172H  (3AH) LDA F69AH
5175H  (CDH) CALL 5195H
5178H  (C3H) JMP 50CAH

517BH  (79H) MOV A,C
517CH  (C6H) ADI 15H
517EH  (05H) DCR B
517FH  (C2H) JNZ 517CH
5182H  (C6H) ADI 6BH
5184H  (E1H) POP H
5185H  (77H) MOV M,A
5186H  (E5H) PUSH H
5187H  (C3H) JMP 50CAH

518AH  (13H) INX D
518BH  (1AH) LDAX D
518CH  (FEH) CPI 1AH
518EH  (CAH) JZ 52BAH
5191H  (FEH) CPI 7EH
5193H  (C9H) RET

5194H  (7EH) MOV A,M
5195H  (4FH) MOV C,A
5196H  (3AH) LDA F69EH
5199H  (B7H) ORA A
519AH  (79H) MOV A,C
519BH  (C1H) POP B
519CH  (E1H) POP H
519DH  (23H) INX H
519EH  (C2H) JNZ 51A2H
51A1H  (77H) MOV M,A
51A2H  (E5H) PUSH H
51A3H  (C5H) PUSH B
51A4H  (C8H) RZ
51A5H  (E7H) RST 4          ; Send character in A to screen/printer
51A6H  (D5H) PUSH D
51A7H  (6FH) MOV L,A
51A8H  (3AH) LDA F63AH      ; Cursor column (1-40)
51ABH  (2FH) CMA
51ACH  (C6H) ADI 2CH
51AEH  (67H) MOV H,A
51AFH  (7DH) MOV A,L
51B0H  (CDH) CALL 51D7H
51B3H  (00H) NOP
51B4H  (00H) NOP
51B5H  (3FH) CMC
51B6H  (CAH) JZ 51C4H
51B9H  (D2H) JNC 51C7H      ; Print current STAT settings
51BCH  (13H) INX D
51BDH  (1AH) LDAX D
51BEH  (CDH) CALL 51D7H
51C1H  (C3H) JMP 51B6H

51C4H  (CDH) CALL 532FH
51C7H  (CDH) CALL 5075H
51CAH  (00H) NOP
51CBH  (D1H) POP D
51CCH  (C8H) RZ
51CDH  (FEH) CPI 20H
51CFH  (DAH) JC 52BAH
51D2H  (CCH) CZ 5327H
51D5H  (00H) NOP
51D6H  (C9H) RET

51D7H  (25H) DCR H
51D8H  (C8H) RZ
51D9H  (FEH) CPI 21H
51DBH  (3FH) CMC
51DCH  (D0H) RNC
51DDH  (FEH) CPI FEH
51DFH  (3DH) DCR A
51E0H  (D0H) RNC
51E1H  (D6H) SUI 7FH
51E3H  (CAH) JZ 5200H
51E6H  (D8H) RC
51E7H  (25H) DCR H
51E8H  (00H) NOP
51E9H  (C8H) RZ
51EAH  (F5H) PUSH PSW
51EBH  (3AH) LDA F69FH
51EEH  (B7H) ORA A
51EFH  (01H) LXI B,050BH
51F2H  (C2H) JNZ 51F8H
51F5H  (01H) LXI B,0015H
51F8H  (F1H) POP PSW
51F9H  (90H) SUB B
51FAH  (90H) SUB B
51FBH  (00H) NOP
51FCH  (D8H) RC
51FDH  (3CH) INR A
51FEH  (FEH) CPI 6AH
5200H  (3DH) DCR A
5201H  (D0H) RNC
5202H  (80H) ADD B
5203H  (91H) SUB C
5204H  (D8H) RC
5205H  (C2H) JNZ 5203H
5208H  (3CH) INR A
5209H  (C9H) RET

520AH  (C1H) POP B
520BH  (E1H) POP H
520CH  (23H) INX H
520DH  (E5H) PUSH H
520EH  (C5H) PUSH B
520FH  (C9H) RET

5210H  (AFH) XRA A
5211H  (32H) STA F69FH
5214H  (CDH) CALL 518AH
5217H  (C3H) JMP 522FH      ; TELCOM CALL instruction routine

521AH  (CDH) CALL 52ABH
521DH  (C2H) JNZ 5210H
5220H  (CDH) CALL 518AH
5223H  (DAH) JC 522FH       ; TELCOM CALL instruction routine
5226H  (C2H) JNZ 5239H
5229H  (32H) STA F69FH
522CH  (C3H) JMP 521AH

522FH  (CDH) CALL 5195H
5232H  (AFH) XRA A
5233H  (32H) STA F69FH
5236H  (C3H) JMP 521AH

5239H  (FEH) CPI 80H
523BH  (C2H) JNZ 5248H
523EH  (3EH) MVI A,0DH
5240H  (CDH) CALL 5195H
5243H  (3EH) MVI A,0AH
5245H  (C3H) JMP 522FH      ; TELCOM CALL instruction routine

5248H  (FEH) CPI FEH
524AH  (CAH) JZ 5281H
524DH  (D2H) JNC 5210H
5250H  (4FH) MOV C,A
5251H  (3AH) LDA F69FH
5254H  (B7H) ORA A
5255H  (79H) MOV A,C
5256H  (CAH) JZ 5281H
5259H  (D6H) SUI 86H
525BH  (DAH) JC 521AH
525EH  (01H) LXI B,0000H
5261H  (0CH) INR C
5262H  (D6H) SUI 0BH
5264H  (D2H) JNC 5261H
5267H  (C6H) ADI 3BH
5269H  (CDH) CALL 5092H
526CH  (32H) STA F69AH
526FH  (79H) MOV A,C
5270H  (C6H) ADI 2FH
5272H  (CDH) CALL 5092H
5275H  (CDH) CALL 5195H
5278H  (3AH) LDA F69AH
527BH  (CDH) CALL 5195H
527EH  (C3H) JMP 521AH

5281H  (D6H) SUI 81H
5283H  (21H) LXI H,F68BH
5286H  (2BH) DCX H
5287H  (D6H) SUI 15H
5289H  (D2H) JNC 5286H
528CH  (C6H) ADI 16H
528EH  (32H) STA F69AH
5291H  (CDH) CALL 5194H
5294H  (3AH) LDA F69AH
5297H  (21H) LXI H,F69AH
529AH  (2BH) DCX H
529BH  (3DH) DCR A
529CH  (C2H) JNZ 529AH
529FH  (CDH) CALL 5194H
52A2H  (C3H) JMP 521AH

52A5H  (3AH) LDA F69EH
52A8H  (FEH) CPI 0CH
52AAH  (C8H) RZ
52ABH  (2AH) LHLD F69BH
52AEH  (01H) LXI B,000AH
52B1H  (09H) DAD B
52B2H  (7EH) MOV A,M
52B3H  (FEH) CPI 50H
52B5H  (C8H) RZ
52B6H  (FEH) CPI 43H
52B8H  (37H) STC
52B9H  (C9H) RET

52BAH  (32H) STA F69AH
52BDH  (C5H) PUSH B
52BEH  (CDH) CALL 52A5H
52C1H  (C1H) POP B
52C2H  (D1H) POP D
52C3H  (E1H) POP H
52C4H  (FEH) CPI 0CH
52C6H  (C2H) JNZ 52D6H
52C9H  (3AH) LDA F69AH
52CCH  (FEH) CPI 1AH
52CEH  (CCH) CZ 5327H
52D1H  (CDH) CALL 532BH
52D4H  (BFH) CMP A
52D5H  (C9H) RET

52D6H  (D6H) SUI 43H
52D8H  (CAH) JZ 52E6H
52DBH  (D6H) SUI 0FH
52DDH  (CAH) JZ 52E6H
52E0H  (78H) MOV A,B
52E1H  (FEH) CPI 07H
52E3H  (D2H) JNC 52E7H
52E6H  (23H) INX H
52E7H  (E5H) PUSH H
52E8H  (2BH) DCX H
52E9H  (01H) LXI B,FFFFH
52ECH  (3EH) MVI A,1AH
52EEH  (03H) INX B
52EFH  (23H) INX H
52F0H  (BEH) CMP M
52F1H  (C2H) JNZ 52EEH
52F4H  (E1H) POP H
52F5H  (CDH) CALL 5343H
52F8H  (CDH) CALL 52ABH
52FBH  (CAH) JZ 5304H
52FEH  (3AH) LDA F69DH
5301H  (77H) MOV M,A
5302H  (BFH) CMP A
5303H  (C9H) RET

5304H  (36H) MVI M,4FH
5306H  (C9H) RET

5307H  (21H) LXI H,F686H
530AH  (3EH) MVI A,14H
530CH  (F5H) PUSH PSW
530DH  (7EH) MOV A,M
530EH  (E6H) ANI DFH
5310H  (77H) MOV M,A
5311H  (F1H) POP PSW
5312H  (3DH) DCR A
5313H  (C8H) RZ
5314H  (23H) INX H
5315H  (C3H) JMP 530CH

5318H  (7EH) MOV A,M
5319H  (12H) STAX D
531AH  (23H) INX H
531BH  (13H) INX D
531CH  (0BH) DCX B
531DH  (78H) MOV A,B
531EH  (B1H) ORA C
531FH  (C2H) JNZ 5318H
5322H  (C9H) RET

5323H  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5324H  DW    7283H
5326H  (C9H) RET

5327H  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5328H  DW    12CBH
532AH  (C9H) RET

532BH  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
532CH  DW    4231H
532EH  (C9H) RET

532FH  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5330H  DW    4222H
5332H  (C9H) RET

5333H  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5334H  DW    5AE3H
5336H  (C9H) RET

5337H  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5338H  DW    7242H
533AH  (C9H) RET

533BH  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
533CH  DW    2146H
533EH  (C9H) RET

533FH  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5340H  DW    6B6DH)
5342H  (C9H) RET

5343H  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5344H  DW    6B9FH
5346H  (C9H) RET

5347H  (CFH) RST 1          ; Call main ROM at address in following 2 bytes
5348H  DW    4244H
534AH  (C9H) RET

; =========================================================================================
; Keystoke buffer contents (for performing compression?)
; =========================================================================================
534BH  DB    "etaoinrshdlfcmugypwb"

Navigate to: