; http://www.cpcrulez.2ya.com
;

;
;        ROUTINE RSX MSAVE ET MLOAD : MPACK
;        Serge QUERNE
;
;
         ORG  #A350
;
;        DEF DES RSX
;
         LD   BC,MSAVE                  ; MSAVE,ADRRAM,ADROV,LONG
         LD   HL,TAB1
         CALL #BCD1
         LD   BC,MLOAD                  ; MLOAD,ADRRAM,ADROV,LONG
         LD   HL,TAB2
         CALL #BCD1
         LD   BC,MLDIR                  ; MLDIR,ADROV1,ADROV2,LONG
         LD   HL,TAB3
         CALL #BCD1
         LD   BC,MBSAVE                 ; MBSAVE
         LD   HL,TAB4
         CALL #BCD1
         LD   BC,MBLOAD                 ; MBLOAD
         LD   HL,TAB5
         CALL #BCD1
         LD   BC,MBRUN                  ; MBRUN
         LD   HL,TAB6
         CALL #BCD1
         LD   BC,MPEEK                  ; MPEEK,ADROV
         LD   HL,TAB7
         CALL #BCD1
         LD   BC,MPOKE
         LD   HL,TAB8
         CALL #BCD1
         LD   BC,MDUMP
         LD   HL,TAB9
         CALL #BCD1
;
;        INIT RAMS OVERLAY
;
         LD   B,4
         LD   A,B
INIT     PUSH AF
         PUSH BC
         CALL RAMS
         LD   HL,#4000
         LD   DE,#4001
         LD   BC,#3FFF
         XOR  A
         LD   (HL),A
         LDIR
         POP  BC
         POP  AF
         INC  A
         DJNZ INIT
         XOR  A
         JP   RAMS
;
MSAVE    DEFW NOM1
         JP   ROUT1
NOM1     DEFM MSAV
         DEFB "E"+#80
         DEFB 0
MLOAD    DEFW NOM2
         JP   ROUT2
NOM2     DEFM MLOA
         DEFB "D"+#80
         DEFB 0
MLDIR    DEFW NOM3
         JP   ROUT3
NOM3     DEFM MLDI
         DEFB "R"+#80
         DEFB 0
MBSAVE   DEFW NOM4
         JP   ROUT4
NOM4     DEFM MBSAV
         DEFB "E"+#80
         DEFB 0
MBLOAD   DEFW NOM5
         JP   ROUT5
NOM5     DEFM MBLOA
         DEFB "D"+#80
         DEFB 0
MBRUN    DEFW NOM6
         JP   ROUT6
NOM6     DEFM MBRU
         DEFB "N"+#80
         DEFB 0
MPEEK    DEFW NOM7
         JP   ROUT7
NOM7     DEFM MPEE
         DEFB "K"+#80
         DEFB 0
MPOKE    DEFW NOM8
         JP   ROUT8
NOM8     DEFM MPOK
         DEFB "E"+#80
         DEFB 0
MDUMP    DEFW NOM9
         JP   ROUT9
NOM9     DEFM MDUM
         DEFB "P"+#80
         DEFB 0
TAB1     DEFS 4
TAB2     DEFS 4
TAB3     DEFS 4
TAB4     DEFS 4
TAB5     DEFS 4
TAB6     DEFS 4
TAB7     DEFS 4
TAB8     DEFS 4
TAB9     DEFS 4
;
;        MSAVE,ADRRAM,ADROV,LONG
;
ROUT1    CALL PARAML
SUITE    PUSH BC
         PUSH DE
         PUSH HL
         CALL CALC
         POP  HL
         XOR  A
         CALL RAMS
         LD   A,(HL)
         PUSH AF
         LD   A,B
         CALL RAMS
         POP  AF
         LD   (DE),A
         POP  DE
         POP  BC
         INC  HL
         INC  DE
         DEC  BC
         LD   A,B
         OR   C
         JR   NZ,SUITE
         XOR  A
         JP   RAMS
CALC     LD   B,4
         LD   A,#3F
SUITE1   CP   D
         JR   NC,INF
         ADD  A,#40
         INC  B
         JR   SUITE1
INF      SBC  A,#3F
         EX   DE,HL
         LD   D,A
         LD   E,0
         XOR  A
         SBC  HL,DE
         LD   DE,#4000
         ADD  HL,DE
         EX   DE,HL
         RET
PARAML   LD   B,(IX+#01)
         LD   C,(IX+#00)
         LD   D,(IX+#03)
         LD   E,(IX+#02)
         LD   H,(IX+#05)
         LD   L,(IX+#04)
         RET
;
;        MLOAD,ADRRAM,ADROV,LONG
;
;
ROUT2    CALL PARAML
CONT     PUSH BC
         PUSH DE
         PUSH HL
         CALL CALC
         POP  HL
         LD   A,B
         CALL RAMS
         LD   A,(DE)
         PUSH AF
         XOR  A
         CALL RAMS
         POP  AF
         LD   (HL),A
         POP  DE
         POP  BC
         INC  DE
         INC  HL
         DEC  BC
         LD   A,B
         OR   C
         JR   NZ,CONT
         XOR  A
         JP   RAMS
;
;        MLDIR,ADROV1,ADROV2,LONG
;
ROUT3    CALL PARAML
         EX   DE,HL
CONT2    PUSH BC
         PUSH DE
         PUSH HL
         CALL EXT
         POP  HL
         PUSH HL
         PUSH AF
         EX   DE,HL
         CALL EXT
         POP  AF
         LD   (DE),A
         POP  HL
         POP  DE
         POP  BC
         INC  HL
         INC  DE
         DEC  BC
         LD   A,B
         OR   C
         JR   NZ,CONT2
DECON    XOR  A
         JP   RAMS
EXT      CALL CALC
         LD   A,B
         CALL RAMS
         LD   A,(DE)
         RET
RAMS     OR   #C0
         DI
         PUSH BC
         LD   B,#7F
         OUT  (C),A
         POP  BC
         EI
         RET
;
;        MBSAVE
;
ROUT4    LD   HL,#AE5E
         LD   DE,#100
         PUSH DE
         LD   BC,18
         LDIR
         LD   HL,#16B
         LD   A,#FF
         LD   (HL),A
         LD   HL,(#AE66)
         LD   DE,#16F
         XOR  A
         SBC  HL,DE
         LD   BC,#80
         ADD  HL,BC
         PUSH HL
         LD   (#16C),HL
         POP  BC
         POP  DE
         PUSH DE
         POP  HL
         JP   SUITE
;
;        MBLOAD
;
ROUT5    LD   A,4
         CALL RAMS
         LD   BC,(#416C)
         LD   A,(#416B)
         CP   #FF
         RET  NZ
         XOR  A
         CALL RAMS
         LD   HL,#100
         LD   D,H
         LD   E,L
         CALL CONT
         LD   HL,#100
         LD   DE,#AE5E
         LD   BC,18
         LDIR
         RET
;
;        MBRUN
;
ROUT6    CALL ROUT5
         CALL #B900
         JP   #EA78
;
;        MPEEK,ADROV
;
ROUT7    CALL PARAML
         PUSH BC
         POP  DE
         CALL EXT
         PUSH AF
         CALL DECON
         LD   A,"#"
         CALL #BB5A
         POP  AF
;
CONV     PUSH AF                        ; ROUTINE CONVERSION ACCU EN CARACT AFF
         SRA  A
         SRA  A
         SRA  A
         SRA  A
         CALL CONV1
         POP  AF
CONV1    AND  #0F
         OR   #30
         CP   #3A
         JR   C,CONV2
         ADC  A,#7
CONV2    CALL #BB5A
         RET
;
;        MPOKE,ADROV,VAL
;
ROUT8    CALL PARAML
         PUSH BC
         CALL EXT
         POP  HL
         EX   DE,HL
         LD   (HL),E
         INC  HL
         LD   (HL),D
         JP   DECON
;
;        MDUMP,ADROV
;
ROUT9    CALL PARAML
         PUSH BC
         LD   A,2
         CALL #BC0E
         POP  DE
D3       LD   B,16
         CALL TAB
         LD   A,D
         CALL CONV
         LD   A,E
         CALL CONV
         CALL TAB
D2       PUSH BC
         PUSH DE
         CALL EXT
         POP  DE
         CP   32
         JR   NC,D1
         LD   A,"."
D1       CALL #BB5A
         LD   A,32
         CALL #BB5A
         INC  DE
         POP  BC
         DJNZ D2
         CALL #BB06
         CP   32
         JP   NZ,DECON
         LD   A,13
         CALL #BB5A
         LD   A,10
         CALL #BB5A
         JR   D3
;
TAB      PUSH BC
         LD   B,5
TABU     LD   A,32
         CALL #BB5A
         DJNZ TABU
         POP  BC
         RET