;

;        Logon System 1989
;
;        Written by LongShot : 30/11/89
;
;        Amazing Demo Copier including Formatter
;
;
ORG #100
;
TT EQU 64+31
FF EQU 64+4
;
J
NUMSUIV
DI  Interrupt Out
LD (NUMSUIV),A  On s
CALL INIT
;
REMAKE
LD A,1  Motor On
CALL MOTOR
CALL MOTOR
;
CALL TRAK00
;
;
;        Lire 5 secteurs Counter Grx
;
LD B,5
INITRS
PUSH BC
LD HL,LIRES1  Lire Secteur #43.#44.#45.#46.#47
CALL ENVOIP
;
LD (SIX1+2),HL
SIX1 LD IX,0000
BIT 7,(IX-6)
JP Z,READERR
LD HL,NSEC1
INC (HL)  Num Sec + 1
INC HL
INC HL
INC (HL)  Idem
INC HL
INC HL
INC HL
INC HL
INC (HL)  Buffer + 512
INC (HL)
POP BC
DJNZ INITRS
;
;        Decompacter Secteurs
;
LD HL,#B400  Buffer Address
LD DE,#C000  Video Dest
DECOMP
LD A,(HL)
CP 36
JR Z,DECW
CP 37
JR Z,DECB
CALL STBYDE
INC HL
JR DECOMP
DECW
INC HL
LD A,(HL)
LD (DECW1+1),A
INC HL
LD C,(HL)
INC HL
LD B,(HL)
INC HL
DECW1
LD A,0
CALL STBYDE
DEC BC
LD A,B
OR C
JR NZ,DECW1
JR DECOMP
DECB
INC HL
LD A,(HL)
INC HL
LD B,(HL)
INC HL
LD C,A
OR B  B=A=0
JR Z,FINDEC
LD A,C
DECB1
CALL STBYDE
DJNZ DECB1
JR DECOMP
FINDEC  Fin de Decompactage
;
CALL GENVID2  Crt Normal + Couleur
;
LD HL,#F940  Complete Part 1 Digit
LD DE,#C190
CALL COMPLI
LD HL,#FC10  Complete Part 2
LD DE,#C460
CALL COMPLI
;
;
LD A,(FLAGRAM)  Memoire Dispo ?
OR A
JP Z,GEST128  Oui
;
GEST064
LD D,1
LD C,0
LD A,3
G64R1
PUSH AF
PUSH DE
PUSH BC
CALL ECRRE
LD HL,READSEC
LD (MODRW+1),HL
CALL RWRAMC  Burp !
LD A,1
CALL CHGDISK
FLST1 LD A,0
OR A
JR NZ,NOFLST
INC A
LD (FLST1+1),A
CALL FORMDK
NOFLST
CALL ECRWR
LD HL,WRITSEC
LD (MODRW+1),HL
POP BC
POP DE
CALL RWRAMC
PUSH BC
PUSH DE
XOR A
CALL CHGDISK
POP DE
POP BC
POP AF
DEC A
JR NZ,G64R1
PUSH DE
PUSH BC
CALL ECRRE
LD HL,READSEC
LD (MODRW+1),HL
LD A,155
CALL RWRAMC1
LD HL,#AC00
CALL READSYS
LD A,1
CALL CHGDISK
CALL ECRWR
POP BC
POP DE
LD HL,WRITSEC
LD (MODRW+1),HL
LD A,155
CALL RWRAMC1
LD HL,#AC00
CALL WRITSYS
JP FINCOPY
;
;
GEST128
;        On va engloutir 256 secteurs soit 64 Kb de donnees
;
CALL ECRRE
LD HL,READSEC
LD (MODRW+1),HL
CALL RWBANK  Burp !
CALL RWRAMC
LD A,1
CALL CHGDISK  Change Disk
CALL FORMDK  Formate Dk Dest
CALL ECRWR
LD HL,WRITSEC
LD (MODRW+1),HL
CALL RWBANK  Save Sect : Bleuuaaarrp !
CALL RWRAMC
PUSH BC  Sauve Piste/Sect
PUSH DE
XOR A
CALL CHGDISK
CALL ECRRE
LD HL,READSEC
LD (MODRW+1),HL
LD A,3
CALL RWBANK1
CALL RWBANK2
LD HL,#1000
CALL READSYS
LD A,1
CALL CHGDISK
CALL ECRWR
POP DE
POP BC
LD HL,WRITSEC
LD (MODRW+1),HL
LD A,3
CALL RWBANK1
CALL RWBANK2
LD HL,#1000
CALL WRITSYS
JP FINCOPY
;
ECRWR
PUSH HL
LD HL,CHAINE3
ECRPR
PUSH DE
PUSH BC
LD DE,#D815
CALL AFFSTR1
POP BC
POP DE
POP HL
RET
ECRRE
PUSH HL
LD HL,CHAINE2
JR ECRPR
;
RWBANK
LD A,4  4 Banques
LD D,1  Piste 1
LD C,0  Sector 0
RWBANK1
PUSH AF
ADD A,#C3
LD B,#7F  Ram Selection
OUT (C),A
LD A,#40  Buffer en #4000
LD (BUFFER+1),A
LD B,A  Pour 64 secteurs
CALL RW256
POP AF
DEC A
JR NZ,RWBANK1
RET
;
RWRAMC
LD A,175
RWRAMC1
LD B,#7F  Select Standard Ram
LD L,#C0
OUT (C),L
LD B,A
LD A,#10
LD (BUFFER+1),A  En #1000
JP RW256
;
RWBANK2
LD A,#C7  En Bank 7
LD B,#7F
OUT (C),A
LD A,#40
LD (BUFFER+1),A
LD B,57  57 Secteurs
JP RW256
;
;
;        Lecture de la piste systeme en HL de RamC
;
READSYS
LD BC,#7FC0
OUT (C),C
LD (BUFSYS),HL
LD (ADRSYS+1),HL
CALL TRAK00
LD A,#41
LD (NSEC1),A
LD (NSEC2),A
LD B,9  Lire 9 Sect Syst
RSYS1
PUSH BC
LD HL,LIRES1  Lire Secteur #41 a #49
CALL ENVOIP
LD (SIX2+2),HL
SIX2 LD IX,0000
BIT 7,(IX-6)
JP Z,READERR
LD HL,NSEC1
INC (HL)  Num Sec + 1
INC HL
INC HL
INC (HL)  Idem
INC HL
INC HL
INC HL
INC HL
INC (HL)  Buffer + 512
INC (HL)
POP BC
DJNZ RSYS1
;
;        Gestion numero de la copie
;
ADRSYS LD HL,0000
LD BC,500
ADD HL,BC
LD (GNCOP1+1),HL
LD (GNCOP2+1),HL
GNCOP1 LD HL,(0)
INC HL
GNCOP2 LD (0),HL
RET
;
;
WRITSYS
LD BC,#7FC0
OUT (C),C
LD (ADRBS+1),HL
CALL TRAK00
LD A,#41
LD (NSW1),A
LD (NSW2),A
LD B,9  Ecrire 9 Sect Syst
WSYS1
PUSH BC
LD HL,WRITS1  Ecrire Secteur #41 a #49
CALL ENVOITAB
ADRBS LD HL,0000
CALL ENVTF
LD HL,NSW1
INC (HL)  Num Sec + 1
INC HL
INC HL
INC (HL)  Idem
LD HL,ADRBS+2
INC (HL)
INC (HL)
POP BC
DJNZ WSYS1
RET
;
;        Lecture de B secteurs a partir de la piste D Secteur C
;
RW256
CALL NEWTRAK
LD A,41
SUB D
CALL AFFDIGIT
RWBP
PUSH BC
PUSH DE
MODRW CALL READSEC ; New Track 1ere fois
POP DE
POP BC
INC C  Secteur +1
LD A,C
CP 17  = 17 ?
JR NZ,RWNNP  Non
INC D  Nlle Piste
CALL NEWTRAK
LD A,41
SUB D
CALL AFFDIGIT
LD C,0  Nouveau Secteur
RWNNP
LD HL,BUFFER+1  Buffer Load + 256
INC (HL)
DJNZ RWBP  Lire ts les secteurs
RET
;
;        Se placer sur la piste D
;
NEWTRAK
PUSH DE
PUSH BC
LD A,D
LD (NUMPI),A  Tab Track
LD (PISTS),A  Tab Sector
LD (PISTW),A
LD HL,PISTE  Tab Rech Piste
CALL ENVOIP  Envoi au FDC
ARRPI
LD HL,PISTEOK  Tab Control Exec Finie
CALL ENVOIP
BIT 0,A  Execution Commande Finie ?
JR NZ,ARRPI  Non Redemande
POP BC
POP DE
RET
;
;
TRAK00
PUSH DE
PUSH BC
LD HL,PISTE00
CALL ENVOITAB
JR ARRPI
;
;        Lire le secteur C
;
READSEC
LD A,C
LD (NUMSEC),A
LD (NUMSEC1),A
LD HL,LIRESEC  Tab Read Secteur
CALL ENVOIP
LD (SIX3+2),HL
SIX3 LD IX,0000
BIT 7,(IX-6)
RET NZ
READERR
LD HL,STERR3
ERROR
PUSH HL
CALL GENVID1
POP HL
LD DE,#D805
CALL AFFSTR2
LD E,#45
WKERR
CALL AKEY
RLCA
JP C,WKERR
FINCOPY
LD SP,#100
CALL GENVID1
LD HL,#C9FB
LD (#38),HL
LD SP,#100
XOR A
CALL MOTOR
EI
BCLP
LD B,#F5
WSYNC
IN A,(C)
RRA
JP NC,WSYNC
LD HL,#D801
LD DE,#D800
LD BC,79
LDIR
LD HL,#E001
LD DE,#E000
LD BC,79
LDIR
LD HL,#E801
LD DE,#E800
LD BC,79
LDIR
LD HL,#F001
LD DE,#F000
LD BC,79
LDIR
LD HL,#F801
LD DE,#F800
LD BC,79
LDIR
LD HL,#C051
LD DE,#C050
LD BC,79
LDIR
LD HL,#C851
LD DE,#C850
LD BC,79
LDIR
LD HL,#D051
LD DE,#D050
LD BC,79
LDIR
STRPTR LD HL,STRSCRO
LD A,(HL)
CP #FF
JR NZ,NENDSCR
LD HL,STRSCRO
LD (STRPTR+1),HL
LD A,(HL)
NENDSCR
LD C,A
FLMODC LD A,0
XOR 1
LD (FLMODC+1),A
JR NZ,NNEWPTR
INC HL
LD (STRPTR+1),HL
NNEWPTR
LD B,0
SLA C
SLA C
SLA C
RL B
SLA C
RL B
LD HL,FONTE1
ADD HL,BC
OR A
JR NZ,NOINCDA
INC HL
NOINCDA
LD DE,#D84F
LD B,8
AFFCASC
LD A,(HL)
LD (DE),A
INC HL
INC HL
CALL LSUIVDE
DJNZ AFFCASC
LD E,#41
CALL AKEY
BIT 1,A
JR Z,OTHER
LD E,#47
CALL AKEY
CP #FF
JR NZ,EXIT
DEC E
CALL AKEY
CP #FF
JR NZ,EXIT
DEC E
CALL AKEY
CP #FF
JR NZ,EXIT
DEC E
JP BCLP
EXIT JR EXIT
OTHER
LD A,#43
LD (NSEC1),A
LD (NSEC2),A
LD HL,#B200
LD (BUFSYS),HL
LD HL,STRSCRO
LD (STRPTR+1),HL
XOR A
LD (COUNTL),A
INC A
CALL MOTOR
CALL MOTOR
LD HL,#1000
LD DE,#1001
LD BC,#EFFF
LD (HL),0
LDIR
CALL GENVID2
JP REMAKE
;
;
;        Ecrire le secteur C
;
WRITSEC
LD A,C
LD (NUMSEW),A
LD (NUMSEW1),A
LD HL,WRITESEC
CALL ENVOITAB
LD HL,(BUFFER)
JP ENVTF
;
;        Formatage Amazing Format
;
FORMDK
;        Formatage de la premiere piste standard
;
PUSH BC
PUSH DE
;
LD HL,CHAINE1  Formatting Track
LD DE,#D815
CALL AFFSTR1
;
XOR A
CALL AFFDIGIT
;
CALL TRAK00  Sur Piste 00
CALL FORMATT1
;
;        Formatage des 40 autres Demo System
;
LD B,40
CONTFOR
PUSH BC
LD A,41
SUB B
LD HL,TF2
LD B,17
INITTF2
LD (HL),A
INC HL
INC HL
INC HL
INC HL
DJNZ INITTF2
LD D,A
CALL AFFDIGIT
CALL NEWTRAK
CALL FORMATT2
POP BC
DJNZ CONTFOR
POP DE
POP BC
RET
;
FORMATT1
LD HL,FORCOM1
CALL ENVOITAB  Envoi de la commande
LD HL,TF1  Envoi des Id en phase exec
JR ENVTF
ENTTAB
INC C
LD A,(HL)
OUT (C),A
DEC C
INC HL
ENVTF
IN A,(C)
JP P,ENVTF
AND #20  acore des donnees ? Aga !
JR NZ,ENTTAB
LD HL,ZONE
CALL PHASER1  Ok pour Phase Resultat
LD A,(ZONE+1)  Write Protect Disk
BIT 1,A
JR NZ,WRPRO
RET
RLA  No Disk in Drive  
RET C
LD HL,STERR1
JP ERROR
WRPRO
LD HL,STERR2
JP ERROR
;
FORMATT2
LD HL,FORCOM2
CALL ENVOITAB
LD HL,TF2
JR ENVTF
;
;        Changement de Dk demande
;
CHGDISK
PUSH HL
PUSH BC
PUSH DE
PUSH AF
CALL GENVID1  Ok pour Status Line
POP AF
LD HL,CHAINE4
OR A
JR Z,OKWAIT
LD HL,CHAINE5
OKWAIT
LD DE,#D805
CALL AFFSTR2
;
WAIT
LD BC,#F6C0
OUT (C),C
LD BC,#F40E
OUT (C),C
LD BC,#F792
OUT (C),C
LD BC,#F648
OUT (C),C
LD B,#F4
IN E,(C)
LD BC,#F645
OUT (C),C
LD B,#F4
IN A,(C)
LD BC,#F782
OUT (C),C
LD BC,#F600
OUT (C),C
BIT 2,E
JP Z,FINCOPY
RLCA
JP C,WAIT
;
CALL GENVID2
;
POP DE
POP BC
POP HL
RET
;
AKEY
LD BC,#F6C0
OUT (C),C
LD BC,#F40E
OUT (C),C
LD BC,#F792
OUT (C),C
DEC B
OUT (C),E
LD B,#F4
IN A,(C)
LD BC,#F782
OUT (C),C
LD BC,#F600
OUT (C),C
RET
;
GENVID2
CALL RESTO
LD B,#7F  Ink 1 sur Texte On
LD HL,#014A
OUT (C),H
OUT (C),L
LD A,#8C
OUT (C),A
JR BLANKST
;
GENVID1
LD BC,#7F10
LD HL,#0040
OUT (C),C
OUT (C),L
OUT (C),H
OUT (C),L
LD HL,#014B
OUT (C),H
OUT (C),L
LD HL,#0254
OUT (C),H
OUT (C),L
LD A,#8D
OUT (C),A
LD BC,#BC06
OUT (C),C
LD BC,#BD02
OUT (C),C
LD BC,#BC07
OUT (C),C
LD BC,#BD15
OUT (C),C
BLANKST
LD B,8
LD HL,#C000
LD DE,#C001
BLKS1
PUSH BC
PUSH HL
LD (HL),0
LD BC,159
LDIR
POP HL
POP BC
LD A,H
ADD A,8
LD H,A
LD D,A
LD E,1
DJNZ BLKS1
RET
;
;        Affichage d'une chaine HL en DE : Utilisation du Mode 0
;        Fonte : Fonte0 Copyright Logon System
;
AFFSTR1
XOR A
LD (FLAGM+1),A
AFFST11
LD A,(HL)
CP #FF
RET Z
CALL AFFCAR1
INC HL
JR AFFST11
;
;        Affichage d'une chaine HL en DE : Mode 1
;        Fonte : FlySpy Fonte rippee par LongShot
;
AFFSTR2
LD A,(HL)
CP #FF
RET Z
CALL AFFCAR2
INC HL
JR AFFSTR2
;
AFFCAR1
PUSH HL
SLA A  Car x 4
SLA A
LD C,A
LD B,0
LD HL,FONTE0  Ptr dans Fonte
ADD HL,BC
PUSH DE  Sauve Grx Ptr
FLAGM LD A,0
XOR 1
LD (FLAGM+1),A
JR NZ,GEST1
CALL AFFCA2
POP DE
INC DE
JR AFFCS
GEST1
CALL AFFCA1
POP DE
AFFCS
INC DE
INC DE
POP HL
RET
;
;
AFFCA1
LD B,4  4 Byte Stockage
AFFC2
PUSH BC
LD C,(HL)  Lire Byte
LD B,2  2 Ligne par Byte
AFFC1
XOR A  A=0
SRL C
RRA
SRL C
RRA
LD (DE),A  Stockage 2 premiers pixels
XOR A
SRL C
RRA
SRL C
RRA
INC DE
LD (DE),A  Stockage 2 pixels suivants
DEC DE
CALL LSUIVDE
DJNZ AFFC1  2 lignes a faire
INC HL  Byte suivant
POP BC  Tt ceci 4 fois
DJNZ AFFC2
RET
;
;
;
AFFCA2
LD B,4
AFFC4
PUSH BC
LD A,2
LD C,(HL)
AFFC3
EX AF,AF
XOR A
LD B,C  Sauve Bit 2
SRL C  Ejecte
;
XOR A
SRL C  Sort Bit 1
RRA  Entre 
OR A
RRA  Blank 1er Pixel
LD (DE),A  Stockage 2 premiers pixels
;
XOR A
SRL C  Sort Bit 4
RRA
INC DE
INC DE
LD (DE),A
DEC DE
;
XOR A
SRL C  Sort Bit 3
RRA
RR B  Placer Bit 2
RRA
LD (DE),A
DEC DE
CALL LSUIVDE
EX AF,AF
DEC A
JR NZ,AFFC3
;
INC HL  Byte suivant
POP BC  Tt ceci 4 fois
DJNZ AFFC4
RET
;
AFFCAR2
PUSH HL
PUSH DE
LD B,0
SLA A  Car x 16
SLA A
SLA A
RL B
SLA A
RL B
LD C,A
LD HL,FONTE1
ADD HL,BC
LD B,8
AFFCT2
LD A,(HL)
LD (DE),A
INC DE
INC HL
LD A,(HL)
LD (DE),A
INC HL
DEC DE
CALL LSUIVDE
DJNZ AFFCT2
POP DE
POP HL
INC DE
INC DE
RET
;
;
LSUIVDE
LD A,D  Ligne suivante
ADD A,8
LD D,A
RET NC
LD A,E
ADD A,80
LD E,A
LD A,D
ADC A,#C0
LD D,A
RET
;
;
FONTE0
DB #79,#F7,#77,#07
DB #7B,#B7,#77,#0B
DB #3D,#33,#33,#0D
DB #7B,#77,#77,#0B
DB #3F,#B3,#33,#0F
DB #3F,#B3,#33,#03
DB #7F,#F3,#77,#0F
DB #77,#F7,#77,#07
DB #99,#99,#99,#09
DB #99,#99,#99,#03
DB #77,#BB,#77,#07
DB #33,#33,#F3,#0F
DB #F6,#77,#77,#07
DB #76,#6E,#66,#06
DB #79,#77,#77,#09
DB #7B,#B7,#33,#03
DB #79,#77,#B7,#0D
DB #7B,#B7,#77,#07
DB #3F,#F3,#CC,#0F
DB #9F,#99,#99,#09
DB #77,#77,#77,#09
DB #77,#77,#57,#08
DB #77,#77,#F7,#07
DB #66,#98,#61,#06
DB #66,#96,#99,#09
DB #4F,#94,#22,#0F
DB #00,#00,#00,#00
;
FONTE1
;
DB #10,#80,#04,#40
DB #29,#28,#38,#A0
DB #08,#20,#29,#28
DB #28,#28,#0C,#0C
DB #70,#E0,#0B,#1C
DB #48,#14,#78,#E0
DB #0B,#1C,#48,#14
DB #78,#C0,#0F,#0E
DB #10,#F0,#00,#10
DB #14,#0E,#14,#02
DB #14,#00,#04,#F0
DB #06,#10,#03,#0E
DB #70,#E0,#08,#10
DB #29,#1C,#28,#14
DB #28,#14,#38,#D0
DB #08,#00,#0F,#0C
DB #70,#F0,#08,#10
DB #29,#0E,#38,#C0
DB #29,#08,#38,#F0
DB #08,#10,#0F,#0E
DB #70,#F0,#08,#10
DB #29,#0E,#38,#C0
DB #28,#40,#29,#08
DB #28,#00,#0C,#00
DB #30,#E0,#00,#10
DB #29,#0E,#28,#70
DB #28,#1C,#38,#D0
DB #0C,#20,#07,#0C
DB #60,#30,#28,#14
DB #38,#D0,#28,#10
DB #29,#1C,#28,#14
DB #28,#14,#0C,#06
DB #30,#F0,#04,#10
DB #07,#42,#01,#40
DB #01,#40,#30,#70
DB #04,#10,#07,#0E
DB #70,#F0,#08,#10
DB #0F,#42,#01,#40
DB #61,#40,#18,#40
DB #0C,#00,#07,#00
DB #60,#70,#28,#90
DB #38,#02,#28,#04
DB #28,#40,#29,#20
DB #29,#18,#0C,#0E
DB #60,#00,#28,#00
DB #28,#00,#28,#00
DB #28,#00,#38,#F0
DB #08,#10,#0F,#0E
DB #60,#30,#38,#50
DB #28,#90,#29,#14
DB #29,#1C,#29,#14
DB #28,#14,#0C,#06
DB #60,#30,#38,#14
DB #28,#94,#28,#50
DB #29,#10,#28,#18
DB #28,#14,#0C,#06
DB #10,#C0,#04,#20
DB #18,#18,#28,#14
DB #18,#90,#0C,#20
DB #06,#00,#03,#08
DB #70,#E0,#08,#10
DB #18,#1C,#18,#D0
DB #08,#00,#18,#0C
DB #18,#00,#0E,#00
DB #10,#C0,#04,#20
DB #18,#18,#29,#1C
DB #09,#D0,#0C,#68
DB #06,#34,#03,#0B
DB #70,#E0,#08,#10
DB #29,#1C,#38,#D0
DB #28,#20,#29,#18
DB #28,#1C,#0C,#06
DB #30,#E0,#08,#10
DB #29,#0E,#3C,#E0
DB #07,#1C,#70,#D0
DB #0C,#00,#07,#0C
DB #30,#F0,#04,#10
DB #07,#42,#01,#40
DB #01,#40,#01,#40
DB #01,#40,#01,#08
DB #60,#30,#28,#14
DB #28,#14,#28,#14
DB #28,#14,#38,#D0
DB #08,#10,#0F,#0E
DB #60,#30,#28,#14
DB #28,#14,#28,#14
DB #18,#18,#0C,#20
DB #06,#40,#03,#08
DB #60,#30,#28,#14
DB #28,#14,#28,#94
DB #29,#94,#38,#50
DB #08,#10,#0F,#0E
DB #60,#30,#18,#10
DB #0C,#20,#06,#40
DB #40,#20,#80,#18
DB #09,#1C,#0E,#06
DB #60,#30,#18,#18
DB #0C,#20,#06,#40
DB #04,#80,#18,#00
DB #28,#00,#0C,#00
DB #70,#F0,#08,#10
DB #0F,#20,#02,#40
DB #04,#80,#08,#70
DB #08,#10,#0F,#0E
DS 16
;
CHAINE1 DB 5,14,17,12,0,19,19,8,13
DB 6,26,19,17,0,2,10,#FF
CHAINE2 DB 26,26,17,4,0,3,8,13,6,26
DB 3,0,19,0,26,26,#FF
CHAINE3 DB 26,26,22,17,8,19,8,13,6
DB 26,3,0,19,0,26,26,#FF
CHAINE4 DB 8,13,18,4,17,19,26
DB 18,14,20,17,2,4
DB 26,3,8,18,10,26,0,13
DB 3,26,15,17,4,18,18
DB 26,0,26,10,4,24,#FF
CHAINE5 DB 8,13,18,4,17,19,26
DB 19,0,17,6,4,19
DB 26,3,8,18,10,26,0,13
DB 3,26,15,17,4,18,18
DB 26,0,26,10,4,24,#FF
STERR1 DB 26,26,13,14,26,3,8,18,10
DB 26,8,13,26,3,17,8,21,4
DB #FF
STERR2 DB 22,17,8,19,4,26
DB 15,17,14,19,4,2,19,4,3
DB 26,3,8,18,10,#FF
STERR3 DB 26,17,4,0,3,26
DB 4,17,17,14,17,#FF
;
STRSCRO
DB #04,#07,#0E,#1A
DB #0C,#00,#0D,#1A
DB #18,#0E,#14,#1A
DB #02,#00,#0D,#1A
DB #03,#0E,#1A,#00
DB #0D,#1A,#0E,#13
DB #07,#04,#11,#1A
DB #02,#0E,#0F,#18
DB #1A,#01,#18,#1A
DB #0F,#11,#04,#12
DB #12,#08,#0D,#06
DB #1A,#13,#07,#04
DB #1A,#02,#0E,#0F
DB #18,#1A,#0A,#04
DB #18,#1A,#1A,#1A
DB #1A,#1A,#1A,#1A
DB #1A,#1A,#1A,#1A
DB #1A,#0F,#11,#04
DB #12,#12,#1A,#00
DB #0D,#1A,#0E,#13
DB #07,#04,#11,#1A
DB #0A,#04,#18,#1A
DB #13,#0E,#1A,#11
DB #04,#13,#14,#11
DB #0D,#1A,#08,#0D
DB #1A,#00,#0C,#00
DB #19,#08,#0D,#06
DB #1A,#03,#04,#0C
DB #0E,#1A,#0E,#11
DB #1A,#16,#00,#08
DB #13,#1A,#13,#16
DB #0E,#1A,#0C,#08
DB #0D,#14,#13,#04
DB #12,#1A,#1A,#1A
DB #1A,#1A,#1A,#1A
DB #1A,#1A,#1A,#1A
DB #1A,#1A,#1A,#1A
DB #FF
;
;
;        Affiche Digit decimal contenu dans A
;
AFFDIGIT
PUSH HL
PUSH DE
PUSH BC
LD BC,10  Petite conversion decimale
DECALC
CP C
JR C,DECOK
SUB C
INC B
JR DECALC
DECOK
LD C,A  2eme digit
SLA A
SLA A
SLA A
SUB C  x 7
LD E,A
LD D,0
LD HL,TABREFC
ADD HL,DE
LD DE,TABCOUL+9
LD A,B
LD BC,7
LDIR
LD B,A
SLA A
SLA A
SLA A
SUB B
LD E,A
LD D,0
LD HL,TABREFC
ADD HL,DE
LD DE,TABCOUL+2
LD BC,7
LDIR
LD HL,TABCOUL+15
LD BC,#7F7F
LD A,#F
SETINK
OUT (C),A
OUTD
LD B,C
DEC A
JR NZ,SETINK
POP BC
POP DE
POP HL
RET
;
;        Routine utilisee durant le decompactage
;
STBYDE
EX AF,AF
LD A,(COUNTL)  Compteur de ligne
INC A
LD (COUNTL),A
CP 80
JR C,NODEDEC
PUSH HL
EX DE,HL
LD DE,80
XOR A
SBC HL,DE
EX DE,HL
POP HL
LD (COUNTL),A
LD A,D
ADD A,8
LD D,A
JR NC,NODEDEC
LD A,E
ADD A,80
LD E,A
LD A,D
ADC A,#C0
LD D,A
NODEDEC
EX AF,AF
LD (DE),A
INC DE
RET
COUNTL DB 0
;
;        Routine utilisee pour les replications de lignes
;
COMPLI
LD A,8*6
CPLI1
EX AF,AF
PUSH HL
PUSH DE
LD BC,80
LDIR
POP DE
LD A,D
ADD A,8
LD D,A
JR NC,NODEB1
LD A,E
ADD A,80
LD E,A
LD A,D
ADC A,#C0
LD D,A
NODEB1
POP HL
EX AF,AF
DEC A
JR NZ,CPLI1
RET
;
;        Initialisations generales
;        Prise en main de l'ordinateur
;
INIT
DI
POP HL
LD SP,#100
PUSH HL
LD B,#7F
LD HL,#8CC0
OUT (C),H  Disable Rom
OUT (C),L  Connecte Ram Normale
LD HL,INTER  Nouveau Systeme Interrupt
LD DE,#38
LDI
LDI
LDI
IM 1
EI  Enable Interrupt  
HALT
;
;        Init Param Video
;
LD HL,#1000
LD DE,#1001
LD BC,#EFFF
LD (HL),0
LDIR
;
RESTO
LD BC,#7F54  Ttes ink
LD A,#10
INKS0
OUT (C),A
OUT (C),C
DEC A
JP P,INKS0
LD HL,CRTSTD+13  Crt C standard
LD D,13
LD BC,#BC00
INCRT
OUT (C),D
INC B
LD A,(HL)
OUT (C),A
DEC HL
DEC B
DEC D
JP P,INCRT
MORET LD B,#FD
LD C,#E7
INC B
INC C
OUT (C),C
LD A,#C9
LD (MORET),A
;
;        6128 ou DK'Tronic installee ?
;
LD HL,#4000
LD BC,#7FC4
LD (HL),L
OUT (C),C
LD (HL),C
LD A,#C0
OUT (C),A
LD A,(HL)
LD (FLAGRAM),A  Si 0 : Ram Supp Dispo
;
RET
;
;        Drive Motor Command
;
MOTOR
EI
LD BC,#FA7E  Motor Drive On
OUT (C),A
LD B,255  Wait Speed Ok !
WDISK
HALT  B*0.02 Sec
DJNZ WDISK
DI
RET
;
;        Envoi des params Tab au Fdc / Execution / Et recuperation data
;
ENVOIP
CALL ENVOITAB
JP PHASER
;
ENVOITAB
LD BC,#FB7E  Status Port
LD D,(HL)  Lire Nb Donnees FDC
INC HL
WAIT1 IN A,(C) ; Lire State P
JP P,WAIT1  Ready ?
LD A,(HL)  Lire Donnee
INC HL  Ptr suivant
INC C  Sur Port Data
OUT (C),A  Envoi Data
DEC C  Sur Port State
LD A,#05  Wait
TEMPW DEC A
NOP
JR NZ,TEMPW
DEC D  Count donnees -1
JR NZ,WAIT1
RET
PHASER
LD A,(HL)  Lire Ptr 16 Bits : HL
INC HL  Pour retirer donnees
LD H,(HL)
LD L,A
PHASER1
LD D,%11000000  DT & DES Bit = 1
WAIT2
IN A,(C)  Read Status
BIT 4,A  FDC Busy ?
RET Z  Non, Fin Commande
CP D  Pret pour retirer data
JR C,WAIT2  Non !
INC C  Oui : Port Data In
IN A,(C)  Retirer Donnee
LD (HL),A  Stockage
INC HL
DEC C  Status Port
JR WAIT2
;
INTER
EI
RETI
;
;
CRTSTD  Table Crt C Standard
DB 63,40,46,14
DB 38,0,25,30,0,7
DB 0,0,48,0
;
FLAGRAM DB 0 ; 0 : 128 Kb
;
TABCOUL DB #54
DB #4A
DS 14
TABREFC
DB TT,TT,TT,TT,TT,TT,FF
DB FF,TT,TT,FF,FF,FF,FF
DB TT,TT,FF,TT,TT,FF,TT
DB TT,TT,TT,TT,FF,FF,TT
DB FF,TT,TT,FF,FF,TT,TT
DB TT,FF,TT,TT,FF,TT,TT
DB TT,FF,TT,TT,TT,TT,TT
DB TT,TT,TT,FF,FF,FF,FF
DB TT,TT,TT,TT,TT,TT,TT
DB TT,TT,TT,TT,FF,TT,TT
;
;
PISTE DB 3
DB %00001111  Seek Track n
DB %00000000  On Drive A
NUMPI DB 00 ; Track Wanted !
DW ZONE  Buffer 
;
PISTEOK DB 1
DB %00001000  Cause interruption State Bit 0
DW ZONE
;
PISTE00 DB 2
DB %00000111
DB %00000000
;
LIRESEC
DB 9
DB %01000110  Read Data
DB %00000000  Drive A
PISTS DB %00000000 ; Piste 0
DB %00000000  Tete 0
NUMSEC DB 0 ; Num Secteur
DB 1  Length Secteur
NUMSEC1 DB 0 ; Dernier Secteur
DB #30  Gap #52
DB #FF  <> 0 pour longueur normale
BUFFER DW 0 ; Adresse de chargement
;
LIRES1 DB 9
DB %01000110
DB %00000000
DB 0
DB 0
NSEC1 DB #43
DB 2
NSEC2 DB #43
DB #52
DB #FF
BUFSYS DW #B200
;
WRITS1 DB 9
DB %01000101
DB 0
DB 0
DB 0
NSW1 DB #41
DB 2
NSW2 DB #41
DB #52
DB #FF
;
WRITESEC DB 9
DB %01000101
DB %00000000
PISTW DB 0
DB 0
NUMSEW DB 0
DB 1
NUMSEW1 DB 0
DB #30
DB #FF
;
FORCOM1 DB 6
DB %01001101  Format Track
DB %00000000  Drive A
DB 2  Taille 512
DB 9  Nb Sect  9
DB #52  Gap 3
DB #E6  Valeur de remplissage
;
FORCOM2 DB 6
DB %01001101
DB %00000000
DB 1
DB 17
DB #20
DB #E6
;
TF1 DB 0
DB 0
DB #41
DB 2
;
DB 0
DB 0
DB #46
DB 2
;
DB 0
DB 0
DB #42
DB 2
;
DB 0
DB 0
DB #47
DB 2
;
DB 0
DB 0
DB #43
DB 2
;
DB 0
DB 0
DB #48
DB 2
;
DB 0
DB 0
DB #44
DB 2
;
DB 0
DB 0
DB #49
DB 2
;
DB 0
DB 0
DB #45
DB 2
;
TF2
DB 1
DB 0
DB 0
DB 1
;
DB 1
DB 0
DB 9
DB 1
;
DB 1
DB 0
DB 1
DB 1
;
DB 1
DB 0
DB 10
DB 1
;
DB 1
DB 0
DB 2
DB 1
;
DB 1
DB 0
DB 11
DB 1
;
DB 1
DB 0
DB 3
DB 1
;
DB 1
DB 0
DB 12
DB 1
;
DB 1
DB 0
DB 4
DB 1
;
DB 1
DB 0
DB 13
DB 1
;
DB 1
DB 0
DB 5
DB 1
;
DB 1
DB 0
DB 14
DB 1
;
DB 1
DB 0
DB 6
DB 1
;
DB 1
DB 0
DB 15
DB 1
;
DB 1
DB 0
DB 7
DB 1
;
DB 1
DB 0
DB 16
DB 1
;
DB 1
DB 0
DB 8
DB 1
;
;
ZONE DS 9
;
FIN

;
;
;
;