;////////////////////////////////////////////////////////////////////////// ;/ / ;/ / ;/ PROJET UN LECTEUR DE DISQUETTE POUR VOTRE GAMEBOY / ;/ / ;/ www.powerofasm.fr.st / ;/ ROM TEST IO V0.5 / ;/ by Jeff / HxC2001 / ;////////////////////////////////////////////////////////////////////////// ;*** RST 00h *** .org 0000h ret ;*** RST 08h *** .org 0008h ret ;*** RST 10h *** .org 0010h ret ;*** RST 18h *** .org 0018h ret ;*** RST 20h *** .org 0020h ret ;*** RST 28h *** .org 0028h ret ;*** RST 30h *** .org 0030h ret ;*** RST 38h *** .org 0038h ret ;*** Hardware Interrupts **************************************************** ;*** Vertical blanking IRQ *** .org 0040h jp vblank reti ;*** LCD status IRQ *** .org 0048h jp vblank reti ;*** Timer owerflow IRQ *** .org 0050h jp timerof ;*** Serial transfer completion IRQ *** .org 0058h reti ;*** Gamepad IRQ *** .org 0060h jp GamePad reti nbsectorp .equ $c200 nbcote .equ $c202 nbreserveds .equ $c204 nbhiddens .equ $c206 srparfat .equ $c208 nbentries .equ $c20a sector .equ $c20c head .equ $c20e piste .equ $c210 xcurs .equ $c219 ycurs .equ $c21a checksumboots .equ $c21b oldseektrack .equ $c21c tempbyte .equ $c21d sectorbuffer .equ 0c000h _MD16temp .equ 0c215h _MD16count .equ 0c217h ;//////////////////////////////////////////////////////////////////////////// .org 0100h jp Start .org 0104h .db 0CEh,0EDh,66h,66h,0CCh,0Dh,00h,0Bh,03h,73h,00h,83h,00h,0Ch,00h,0Dh .db 00,08,11h,1Fh,88h,89h,00,0Eh,0DCh,0CCh,6Eh,0E6h,0DDh,0DDh,0D9h,099h .db 0BBh,0BBh,67h,63h,6Eh,0Eh,0ECh,0CCh,0DDh,0DCh,99h,9Fh,0BBh,0B9h,33h,3Eh .db "HxC2001 DK " ; GamePak name (16 characters) .db 0 .org 0143h .db 80h .db 00h,00h,00h ; (Not used?) .db 00h ; ROM Only .db 00h ; ROM Size 32k .db 00h ; RAM Size 0k .dw 00000h ; Manufacturer code ; .db 01h ; Version .db 00 .db 00,00 ;*** Begin ****************************************************************** .org 150h Start: di ld (tempbyte),a ld a,18 ld (nbsectorp),a ld a,2 ld (nbcote),a ld a,1 ld (nbreserveds),a ld a,0 ld (nbhiddens),a ld a,9 ld (srparfat),a ld a,0 ld (nbentries),a ld bc,0 ld sp,0fffeh call initgb ld a,00001010b ld (0h),a ;cs ram ok ld a,255 ld (oldseektrack),a ei ld de,message1 call putstring ld de,message2 call putstring BOUCLEAZFZE: ld a,0ffh ld (0ff81h),a ld de,message3 call resetfdc jr nc,flopyioti ld a,0h ld (0ff81h),a ld de,message4 JR BOUCLEAZFZE flopyioti: call putstring call startmotor call recal ld b,0 call seek call stopmotor attentecomm: ld a,(0ff82h) and 00001000b jp z,attentecomm ld a,12 call putchar ld de,message5 call putstring call loadandcomparebootsector jr nc,pasrechargefat ld de,0c02bh call putstring call startmotor call recal ld b,0 call seek ld de,message6 call putstring call loadfat pasrechargefat: ld de,message7 call putstring call listeentres ld de,message8 call putstring ld bc,test2 call openfile ;bc=fichier ;de=1 cluster jp c,attentecomm ld a,12 call putchar push de ld de,message3 call putstring pop de call startmotor ld a,d call Affichehex ld a,e call Affichehex ld a,10 call putchar ld a,13 call putchar ld b,d ld c,e dddddshdsk: push bc call giveposicluster ld d,b ld e,c call giveposi ;de=secter logique call liresecteur call affichesect pop bc call getnextcluster ; ld a,b ; call Affichehex ;ld a,c ;call Affichehex ;ld a,20h ;call putchar ld a,b cp 0fh jp nz,dddddshdsk ld a,c cp 0ffh jp nz,dddddshdsk call stopmotor jp attentecomm ddrghd: ld a,(0a004h) ld hl,9c12h call Affichehex jp ddrghd jumptotrack: push af push bc ld a,(piste) ld b,a ld a,(oldseektrack) cp b jr z,pasnecessaire call recal call seek ld a,b ld (oldseektrack),a pasnecessaire: pop bc pop af ret loadandcomparebootsector: push all call startmotor call recal ;ld a,(0a007h) ;and 00000001b ;sla a ;and 00000010b ;ld (0a007h),a ld a,1 ld (sector),a ld a,0 ld (head),a ld (piste),a call liresecteur call stopmotor ld a,(sectorbuffer+18h) ld (nbsectorp),a ld a,(sectorbuffer+18h+1) ld (nbsectorp+1),a ld a,(sectorbuffer+1ah) ld (nbcote),a ld a,(sectorbuffer+1ah+1) ld (nbcote+1),a ld a,(sectorbuffer+0eh) ld (nbreserveds),a ld a,(sectorbuffer+0eh+1) ld (nbreserveds+1),a ld a,(sectorbuffer+1ch) ld (nbhiddens),a ld a,(sectorbuffer+1ch+1) ld (nbhiddens+1),a ld a,(sectorbuffer+16h) ld (srparfat),a ld a,(sectorbuffer+16h+1) ld (srparfat+1),a ld a,(nbentries) ld (tempbyte),a ld a,(sectorbuffer+11h) ld (nbentries),a ld a,(sectorbuffer+11h+1) ld (nbentries+1),a ld hl,0c000h ld c,0 bouclechecksumboot: ld b,(hl) inc hl ld a,c add a,b ld c,a ld a,h cp 0c2h jr nz,bouclechecksumboot ld a,(checksumboots) cp c jr z,memedisque ld a,c ld (checksumboots),a pasmemedisque: pop all scf ret memedisque: ld a,c ld (checksumboots),a ld a,(tempbyte) cp 0 jr z,pasmemedisque pop all scf ccf ret ;//////////////////////////////////////////////FAT loadfat: push all call giveposifat ld d,h ld e,l ld a,(srparfat) ld c,a ld hl,0c300h bouclezdjsdljflsdjf: call giveposi ;de=secter logique call liresecteur call copysecteur ;hl=dest push de ld de,512 add hl,de pop de ;call affichesect inc de dec c jr nz,bouclezdjsdljflsdjf pop all ret copysecteur: ;hl=dest push all ld de,0c000h bouclecopysecteur: ldi a,(de) ldi (hl),a ld a,d cp 0c2h jp nz,bouclecopysecteur pop all ret giveposicluster: ;bc ;lsn=hs+rs+N*spf+nsird+(cln-2)*spc push hl push de push af push bc ld hl,nbreserveds call getwordde ld hl,nbhiddens call getwordhl add hl,de push hl ld hl, srparfat call getwordbc pop hl ld b,0 sla c add hl,bc call givensird ;bc add hl,bc pop bc dec bc dec bc add hl,bc ; push hl ; mov ax,1 ; mov bx,dx ; call mull ; mov cx,ax ;pop hl ld b,h ld c,l pop af pop de pop hl ret givensird: ;cx push af push de push hl ld hl,nbentries call getwordde ld hl,32 call MUL_DEHL_S ld de,512 add hl,de dec hl ld d,h ld e,l ld bc,512 call div_DE_BC_DEBCu ld b,d ld c,e pop hl pop de pop af ret getwordhl: ;hl=adr push af push bc ld a,(hl) inc hl ld b,a ld a,(hl) ld h,a ld l,b pop bc pop af ret getwordbc: ;hl=adr push af push hl ld a,(hl) inc hl ld c,a ld a,(hl) ld b,a pop hl pop af ret getwordde: ;hl=adr push af push hl ld a,(hl) inc hl ld e,a ld a,(hl) ld d,a pop hl pop af ret setword: ;hl=adr bc=data push hl ld (hl),b inc hl ld (hl),c pop hl ret giveposifat: ;hl=position fat push af push de ld hl ,nbreserveds call getwordde ld hl,nbhiddens call getwordhl add hl,de pop de pop af ret giveposi: ;de=secter logique push all push de ld hl,nbsectorp call getwordbc call modl inc bc ld a,c ld (sector),a pop de push de ld hl,nbsectorp call getwordbc call div_DE_BC_DEBCu ld hl,nbcote call getwordbc call modl ld a,c ld (head),a ld hl,nbcote call getwordde ld hl,nbsectorp call getwordhl call MUL_DEHL_S ld b,h ld c,l pop de call div_DE_BC_DEBCu ld a,e ld (piste),a pop all ret getsizeroot: push hl push bc push de ld hl,nbentries call getwordhl ld de,32 call MUL_DEHL_S ld bc,512 add hl,bc dec hl ld d,h ld e,l call div_DE_BC_DEBCu ;call divl ld a,e pop de pop bc pop hl ret getnextcluster: ;bc=cluster push af push de push hl push bc ld d,b ld e,c ld hl,0c300h ;fattest ld bc,2 call div_DE_BC_DEBCu pop bc push bc add hl,bc add hl,de ; add hl,bc dec hl pop bc ld a,c and 1 jr nz,impaire inc hl inc hl ld a,(hl) and 00001111b ld b,a dec hl ld a,(hl) ld c,a pop hl pop de pop af ret impaire: ;dec si inc hl ld a,(hl) and 11110000b ld c,a inc hl ld a,(hl) ld b,a sra c sra c sra c sra c ld a,c and 00001111b ld c,a ld a,b sla a sla a sla a sla a and 11110000b or c ld c,a sra b sra b sra b sra b ld a,b and 00001111b ld b,a pop hl pop de pop af ret giveroot: push de push bc ld hl,srparfat call getwordbc sla c ld hl,nbhiddens call getwordde ld hl,nbreserveds call getwordhl add hl,de add hl,bc pop bc pop de ret listeentres: call startmotor call giveroot ;hl ld d,h ld e,l call giveposi ;de=secter logique call liresecteur ld hl,0c000h call getsizeroot ld c,a suitele: ld a,(hl) cp 0 jr z, nextentree cp 0e5h jr z, nextentree push hl inc hl inc hl ld a,(hl) pop hl cp 0 jr z,nextentree call afficheentree nextentree: push bc ld bc,32 add hl,bc ld a,h pop bc cp 0c2h jp z,nextsector jr suitele finlisteroot: call stopmotor ret nextsector: dec c jr z,finlisteroot inc de call giveposi ;de=secter logique call liresecteur ld hl,0c000h jr suitele afficheentree: push all ; call putchar ld e,8 bouclepopopop: ld a,(hl) cp 20h jr z,pasaffichent call putchar pasaffichent: inc hl dec e jr nz,bouclepopopop ld a,'.' call putchar ld e,3 bouclepopopop2: ld a,(hl) cp 20h jr z,ioezirez2 call putchar inc hl dec e jr nz,bouclepopopop2 ioezirez2: ld a,13 call putchar ld a,10 call putchar pop all ret ;////////////////////////////////////////// compareentree: push all ; call putchar ld e,8 bouclepopopopq: ld a,(hl) cp 20h jr z,pasaffichentq ld d,a ld a,(bc) cp d jr nz,pasbonfichier inc bc ;call putchar pasaffichentq: inc hl dec e jr nz,bouclepopopopq ld d,'.' ld a,(bc) cp d jr nz,pasbonfichier inc bc ld e,3 bouclepopopop2q: ld a,(hl) cp 20h jr z,ioezirez2q ld d,a ld a, (bc) cp d jr nz,pasbonfichier inc bc ;call putchar inc hl dec e jr nz,bouclepopopop2q ioezirez2q: ld a,(bc) cp 0 jp nz,pasbonfichier pop all push af push hl push bc ld bc,1ah add hl,bc ld a,(hl) ld e,a inc hl ld a,(hl) ld d,a pop bc pop hl pop af scf ccf ret pasbonfichier: pop all scf ret openfile: ;bc=fichier ;de=1 cluster push bc call startmotor call giveroot ;hl ld d,h ld e,l call giveposi ;de=secter logique call liresecteur ld hl,0c000h call getsizeroot ld c,a suiteleb: ld a,(hl) cp 0 jr z, nextentreeb cp 0e5h jr z, nextentreeb push hl inc hl inc hl ld a,(hl) pop hl cp 0 jr z,nextentreeb ld a,c pop bc call compareentree jr nc,okfichiertrouver push bc ld c,a nextentreeb: push bc ld bc,32 add hl,bc ld a,h pop bc cp 0c2h jp z,nextsectorb jr suiteleb finlisterootb: call stopmotor pop bc scf ret nextsectorb: dec c jr z,finlisterootb inc de call giveposi ;de=secter logique call liresecteur ld hl,0c000h jr suiteleb okfichiertrouver: call stopmotor scf ccf ret ;---------------------------------------------------------------------------- ;[ MUL_DEHL_S ] by Hideaki Omuro ; optimized for size (22 bytes, 910-1214 clocks) ; ;parameters: ; HL = 16-bit multiplicand, DE = 16-bit multiplier ;returns: ; DEHL = 32-bit product ;modifies: ; ABCDEFHL ;---------------------------------------------------------------------------- MUL_DEHL_S: LD B, H ; BC = multiplicand, DE = multiplier LD C, L LD HL, 0 ; result = 0 LD A, 16 ; 16 loops (16 bits) _CMDEHL_mulloop: ADD HL, HL ; 32-bit shift/test bit RL E RL D JR NC, _CMDEHL_noadd ; if shifted bit is set then ADD HL, BC ; add the multiplier JR NC, _CMDEHL_noadd ; if the added causes carry then INC DE ; increment high word _CMDEHL_noadd: DEC A JR NZ, _CMDEHL_mulloop RET ;---------------------------------------------------------------------------- ; PUSHS ; ; SECTION "Math Div 16 Ram",bss ;_MD16temp ds 2 ;_MD16count db ; POPS ; SECTION "Math Div 16 Code",home ; 16 bit division ; DE = DE / BC, BC = remainder div_DE_BC_DEBCu: push hl call divdebc pop hl ret divdebc: ld hl,_MD16temp ld [hl],c inc hl ld [hl],b inc hl ld [hl],17 ld bc,0 nxtbit: ld hl,_MD16count ld a,e rla ld e,a ld a,d rla ld d,a dec [hl] ret z ld a,c rla ld c,a ld a,b rla ld b,a dec hl dec hl ld a,c sub [hl] ld c,a inc hl ld a,b sbc a,[hl] ld b,a jr nc,noadd dec hl ld a,c add a,[hl] ld c,a inc hl ld a,b adc a,[hl] ld b,a noadd: ccf jr nxtbit ;////////////////////////////////////////////// modl:; de bc ->bc push af push de push hl call div_DE_BC_DEBCu pop hl pop de pop af ret ;////////////////////////////////////////////// ;////////////////////////////////////////////// waitint: push af ld a,0 ld (0ff80h),a attenteint: ld a,(0ff80h) cp 16*4 jr z,finerreurint ld a ,(0a000h) bit 7,a jr z,attenteint call senseint jr c,finerreurint pop af scf ccf ret finerreurint: pop af SCF ret ;////////////////////////////////////////////// CONVERTBINHEXBYTEPROC: ;BC=caractere ;A=valeur PUSH AF PUSH DE LD E,A LD C,'0' AND 11110000B CP 0 JP Z,SUITECONVERTHEXBYTE BOUCLECONVERT001: INC C LD D,A LD A,C CP '9'+1;':' JP NZ,SUITEBOUCLE0515 LD C,'A' SUITEBOUCLE0515: LD A,D SUB 00010000B JP NZ,BOUCLECONVERT001 SUITECONVERTHEXBYTE: LD B,C PUSH BC LD C,'0' LD A,E AND 00001111B JP Z,FINCONVERTBINHEXBYTEPROC BOUCLECONVERT002: INC C LD D,A LD A,C CP '9'+1;':' JP NZ,SUITEBOUCLE0616 LD C,'A' SUITEBOUCLE0616: LD A,D DEC A JP NZ,BOUCLECONVERT002 FINCONVERTBINHEXBYTEPROC: POP DE LD B,D POP DE POP AF RET Affichehex: push bc push af push hl push de call CONVERTBINHEXBYTEPROC ld a,b call putchar inc HL ld A,C call putchar pop de pop hl pop af pop bc ret ;////////////////////////////////////////////// resetfdc: push hl LD A,0 LD (0a002h),A ; reset LD C,250 CALL wait_time ; LD A,00001100b ; /reset LD (0a002h),A call waitint ; attente de l'int jr c,erreurreset ld a,0 ld (0ff80h),a boucleattentenoint: ld a,(0ff80h) cp 16*2 jr z,erreurreset ld a,(0a000h) ; attente de la suppression de l'int and 10000000b jr nz,boucleattentenoint ld c,00000010b ld a,(tempbyte) cp 01h jr z,gbmode cp 0ffh jr z,gbmode ld c,00000000b gbmode: ld a,c ld (0a007h),a ld a,00000011b call fdc_write jr c,erreurreset ld a,11001111b call fdc_write jr c,erreurreset ld a,00000011b call fdc_write jr c,erreurreset ld C,190 CALL wait_time ; retardo de 30-45æs scf ccf pop hl ret erreurreset: scf pop hl ret ;///////////////////////////////// wait_time: push AF push BC ld a,15 bouclewait_time: nop nop nop nop nop nop dec a jp nz,bouclewait_time ld a,15 dec c jp nz,bouclewait_time pop BC pop AF ret ;////////////////////////////////////////// wait_time2: NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ret ;////////////////////////////////////////// ;///////////////////////////////////////// fdc_write: push af push bc push hl ld c,5 call wait_time ; esperar 30-45 æs ld hl,0a004h ; registro de estado ld b,40h CALL wait0 ; esperar FDC listo para OUT jr c,fdc_wr_fail ld b,80h CALL wait1 jr c,fdc_wr_fail ; error ld (0a005h),a jr fdc_wr_ret fdc_wr_fail: POP HL POP BC POP AF scf RET fdc_wr_ret: POP HL POP BC POP AF scf ccf RET ;///////////////////////////////////// wait0: PUSH af push bc LD c,0 wait0_do: LD a,(hl) AND b JP z,wait0_end ; bit(s) ya a 0 wait0_delay0: call wait_time2 DEC c JP Z,wait0_fail ; timeout LD a,(HL) ; volver a leer del puerto E/S AND b JP z,wait0_end ; bit(s) ya a 0 wait0_delay1: call wait_time2 DEC c JP NZ,wait0_do ; a£n no hay timeout ;JP wait0_do ; a£n no hay timeout wait0_fail: pop bc POP Af SCF ; error de timeout RET wait0_end: pop bc POP Af SCF CCF RET ;///////////////////////////////////// wait1: PUSH af push bc LD C,0 wait1_do: LD A,(HL) AND B JP nz,wait1_end ; bit(s) ya a 0 wait1_delay0: call wait_time2 DEC C JP Z,wait1_fail ; timeout LD A,(HL) ; volver a leer del puerto E/S AND B JP nz,wait1_end ; bit(s) ya a 0 wait1_delay1: call wait_time2 DEC C JP NZ,wait1_do ; a£n no hay timeout wait1_fail: pop bc POP af SCF ; error de timeout RET wait1_end: pop bc POP af SCF ; error de timeout CCF RET ;///////////////////////////////////// recal: push all ld a,255 ld (oldseektrack),a ld a,00000111b call fdc_write jr c,errorrecal ld a,00000000b call fdc_write jr c,errorrecal call waitint jr c,errorrecal pop all scf ccf ret errorrecal: pop all scf ret ;///////////////////////////////////// senseint: push af push hl ld a,00001000b call fdc_write jr c,senseerror call fdc_read jr c,senseerror call fdc_read jr c,senseerror pop hl pop af scf ccf ret senseerror: pop hl pop af scf ret ;///////////////////////////////////// seek: ;b=secteur push all ld a,00001111b call fdc_write jr c,seekerror ld a,00000100b call fdc_write jr c,seekerror ld a,b call fdc_write jr c,seekerror call waitint jr c,seekerror pop all scf ccf ret seekerror: pop all scf ret ;///////////////////////////////////// startmotor: push af ld a,00011100b ld (0a002h),a LD C,0 CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; pop af ret ;///////////////////////////////////// stopmotor: push af push bc LD C,0 CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; CALL wait_time ; ld a,00001100b ld (0a002h),a pop bc pop af ret ;///////////////////////////////////// fdc_read: PUSH hl LD C,20 CALL wait_time ; esperar 30-45 æs ld hl,0a004h ; registro de estado ld B,80h CALL wait1 ; esperar FDC listo para E/S jr c,fdc_read_error ld A,80h Jr C,fdc_read_end ; error "not ready" (AH=80h) ld a,(hl) AND 40h ; ¨el FDC quiere dar un byte? Jr NZ,fdc_read_ok ld A,20H ; no: error "bad NEC" (AH=20h) SCF Jr fdc_read_end fdc_read_ok: ; retardo para E/S LD A,(0a005h) ; registro de datos ; leer el byte fdc_read_end: POP hl scf ccf RET fdc_read_error: POP hl scf RET ;//////////////////////////////////// putcar: push af attentezposz: ld a,(0ff41h) and 00000010b jr nz,attentezposz pop af ld (hl),a ret ;//////////////////////////////////// putchar: push all push af ld h,0 ld d,0 push af ld e,20h ld a,(ycurs) ld l,a pop af call MUL_DEHL_S ; by Hideaki Omuro ld bc,9c00h ld a,(xcurs) ld c,a add hl,bc attentezposzh: ld a,(0ff41h) and 00000010b jr nz,attentezposzh pop af cp 10 jr z,retourligne cp 12 jr z,effaceecran cp 13 jr z,sautligne ld (hl),a ld a,(xcurs) ld b,a ld a,(ycurs) ld c,a inc b ld a,b ld (xcurs),a cp 20 jp nz,finputcar2h ld a,0 ld (xcurs),a inc c ld a,c ld (ycurs),a cp 18 jp nz,finputcar2h ld a,0 ld (ycurs),a jr finputcar2h finputcar2h: pop all ret retourligne: ld a,0 ld (xcurs),a pop all ret effaceecran: ld a,0 ld (xcurs),a ld (ycurs),a call ClearBg pop all ret sautligne: ld a,(ycurs) inc a cp 18 jr nz,oksuitefinchar ld a,0 oksuitefinchar: ld (ycurs),a pop all ret ;//////////////////////////////////// putstring: ;de=string hl=ecran push af push de attentezposz2: ld a,(de) cp 0 jr z,finputstring call putchar inc de jr attentezposz2 finputstring: pop de pop af ret ;//////////////////////////////////// liresecteur: di push all call jumptotrack ld a,01100110b call fdc_write jp c,erreurlectsect ld a,(head) rl a rl a and 00000100b call fdc_write jp c,erreurlectsect ld a,(piste) call fdc_write ;piste ld a,(head) call fdc_write ;head jp c,erreurlectsect ld a,(sector) call fdc_write ;secteur jp c,erreurlectsect ld a,2 call fdc_write ;512 jp c,erreurlectsect ld a,(sector);18 call fdc_write ;Last Sector jp c,erreurlectsect ld a,27 call fdc_write ;Gap 3 jp c,erreurlectsect ld a,01h ld hl,0c000h ld de,0a005h ld b,10100000b call fdc_write jp c,erreurlectsect ; call waitint dfkjfl: ; ld a,(0a000h) ; bit 7,a ; jr nz,dfdf ld a,(0a004h) and b xor b jr nz,dfkjfl ; bit 6,a ; jp nz,dfdf ; bit 5,a ; jp z,dfkjfl ld a,(de) ;7 ld (hli),a ; jr dfkjfl ld a,h cp 0c2h jr nz,dfkjfl dfdf: call fdc_read jr c,erreurlectsect ; ld hl,9c20h ; call Affichehex call fdc_read jr c,erreurlectsect ; ld hl,9c23h ; call Affichehex call fdc_read jr c,erreurlectsect ; ld hl,9c26h ; call Affichehex call fdc_read jr c,erreurlectsect ; ld hl,9c29h ; call Affichehex call fdc_read jr c,erreurlectsect ; ld hl,9c2Ch ; call Affichehex call fdc_read jr c,erreurlectsect ; ld hl,9c2Fh ; call Affichehex call fdc_read jr c,erreurlectsect ; ld hl,9c32h ; call Affichehex ei pop all scf ccf ret erreurlectsect: ei pop all scf ret ;//////////////////////////////////// vblank: reti timerof: push af push hl ld hl,0ff80h inc (hl) pop hl pop af reti ;********************************************************** GamePad: push af di ld a,0 ld (0ff82h),a ld a,00100000b ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld b,a and 00000001b jr z,suitekey1 ;droite rpad1: ld a,b and 00000010b ;gauche jr z,suitekey2 rpad2: ld a,b and 00000100b ;haut jr z,suitekey3 rpad3: ld a,b and 00001000b ;bas jr z,suitekey4 rpad4: ld a,00000000b ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld a,00010000b ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld (0ff00h+00h),a ;game pad ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld a,(0ff00h+00h) ld b,a and 00000001b jr z,suitekey5 ;A rpad5: ld a,b and 00000010b ;B jr z,suitekey6 rpad6: ld a,b and 00000100b ;Select jr z,suitekey7 rpad7: ld a,b and 00001000b ;Start jr z,suitekey8 rpad8: ld a,00000000b ld (0ff00h+00h),a ;game pad ld a,(0ff0fh) res 4,a ld (0ff0fh),a ei pop af reti suitekey1: ld a,(0ff82h) or 10000000b ;droite ld (0ff82h),a jr rpad1 suitekey2: ld a,(0ff82h) or 01000000b ;gauche ld (0ff82h),a jr rpad2 suitekey3: ld a,(0ff82h) or 00100000b ;haut ld (0ff82h),a jr rpad3 suitekey4: ld a,(0ff82h) or 00010000b ;bas ld (0ff82h),a jr rpad4 suitekey5: ld a,(0ff82h) or 00001000b ;A ld (0ff82h),a jr rpad5 suitekey6: ld a,(0ff82h) or 00000100b ;B ld (0ff82h),a jr rpad6 suitekey7: ld a,(0ff82h) or 00000010b ;Select ld (0ff82h),a jr rpad7 suitekey8: ld a,(0ff82h) or 00000001b ;Start ld (0ff82h),a jr rpad8 ;********************************************************** CopieTile: Push hl ld hl,T.DAT_TileData ld bc,8000h bouclew: ld a,(hl) ld (bc),a inc bc inc hl ld a,b cp 90h jr nz,bouclew pop hl ret MapBg: Push bc ld bc,9c00h bouclewb: ld a,0 ld (bc),a inc bc ld a,b cp 0a0h jr nz,bouclewb pop bc ret ClearBg: Push bc ld bc,9c00h bouclewbc: attentezposzb: ld a,(0ff41h) and 00000010b jr nz,attentezposzb ld a,0 ld (bc),a inc bc ld a,b cp 0a0h jr nz,bouclewbc pop bc ret ;///////////////////////////////////////////////////////////////////////////// affichesect: push af push hl push bc push de ld hl,09c00h ld bc,0c000h ld de,512 boucle4754: ld a,(bc) call putchar inc hl inc bc dec de ld a,d cp 0 jp nz,boucle4754 ld a,e cp 0 jp nz,boucle4754 pop de pop bc pop hl pop af ret ;/////////////////////////////// ; *** Set single speed mode *** SingleSpeedMode: ld a,(0ff4dh) rlca ; Is GBC already in single speed mode? ret nc ; yes, exit jr CPUToggleSpeed ; *** Set double speed mode *** DoubleSpeedMode: ld a,(0ff4dh) rlca ; Is GBC already in double speed mode? ret c ; yes, exit CPUToggleSpeed: di ld hl,0ffffh;rIE ld a,(hl) push af xor a ld (hl),a ;disable interrupts ld (0ff0fh),a ld a,$30 ld (0ff00h),a ld a,1 ld (0ff4dh),a stop nop pop af ld (hl),a ei ret ; *** Set a single background palette *** ; Entry: HL = pntr to data for 1 palette ; A = palette number (0-7) SetSingleCGB_BGP: add a,a ; a = pal # * 2 add a,a ; a = pal # * 4 add a,a ; a = pal # * 8 add a,$80 ld (0FF68h),a ld bc,$0869 ; b = 8, c = rBCPD loop1: di loop2: ld a,(0ff41h) and 2 jr nz,loop2 ld a,(hli) ld (c),a ei dec b jr nz,loop1 ret palette: .db 255,000,255 ; White - Palette #1 .db 191,000,191 ; Light Grey .db 127,127,000 ; Dark Grey .db 0,0,0 ; Black ;////////////////////////////////////////////////////// initgb: call DoubleSpeedMode ld a,0 ld (xcurs),a ld (ycurs),a ld a,00010101b ld (0ffffh),a ;irq= pad + V - Blank + timer ld a,00010101b ld (0ff0fh),a ld a,00000000b ld (0ff00h+26h),a ;plus de son ld (0ff00h+42h),a ;scroll y bg ld (0ff00h+43h),a ;scroll x bg ld (0ff00h+4Ah),a ;scroll y win ld (0ff00h+4Bh),a ;scroll x win ld a,0 ld hl,palette call SetSingleCGB_BGP ;ld a,11100100b ;ld (0ff00h+47h),a ;palette ;ld (0ff00h+48h),a ;palette obj 1 ;ld (0ff00h+49h),a ;palette obj 2 ld a,01011001b ld (0ff00h+40h),a ;lcd control call CopieTile call MapBg ld a,11011001b ld (0ff00h+40h),a ;lcd control ld a,0 ;timer ld (0ff06h),a ld a,00000100b ;~16f/s ld (0ff07h),a ld a,00000000b ld (0ff00h+00h),a ;game pad ld (0ff82h),a ret T.DAT_TileData: ; E:\gb\asm\Mmxfont.bin 4096 bytes .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .db 126,126,129,129,165,165,129,129,189,189,153,153,129,129,126,126 .db 126,126,255,255,219,219,255,255,195,195,231,231,255,255,126,126 .db 108,108,254,254,254,254,254,254,124,124,56,56,16,16,0,0 .db 16,16,56,56,124,124,254,254,124,124,56,56,16,16,0,0 .db 16,16,56,56,56,56,214,214,254,254,214,214,16,16,124,124 .db 16,16,56,56,124,124,254,254,254,254,214,214,16,16,124,124 .db 0,0,0,0,60,24,60,60,60,60,60,24,0,0,0,0 .db 255,255,255,255,195,231,195,195,195,195,195,231,255,255,255,255 .db 0,0,24,60,36,102,66,66,66,66,36,102,24,60,0,0 .db 255,255,129,195,189,153,189,189,189,189,189,153,129,195,255,255 .db 15,15,7,7,15,15,125,125,204,204,204,204,204,204,120,120 .db 60,60,102,102,102,102,102,102,60,60,24,24,126,126,24,24 .db 63,63,51,51,63,63,48,48,48,48,112,112,240,240,224,224 .db 127,127,99,99,127,127,99,99,99,99,103,103,230,230,192,192 .db 153,153,90,90,60,60,231,231,231,231,60,60,90,90,153,153 .db 192,128,240,224,252,248,255,254,252,248,240,224,192,128,0,0 .db 3,1,15,7,63,31,255,127,63,31,15,7,3,1,0,0 .db 24,24,60,60,126,126,24,24,24,24,126,126,60,60,24,24 .db 102,102,102,102,102,102,102,102,102,102,0,0,102,102,0,0 .db 255,127,219,219,219,219,251,123,27,27,27,27,27,27,0,0 .db 126,60,102,102,124,56,108,108,108,108,124,56,204,204,252,120 .db 0,0,0,0,0,0,0,0,126,126,126,126,126,126,0,0 .db 24,24,60,60,126,126,24,24,126,126,60,60,24,24,255,255 .db 16,16,56,56,124,124,16,16,16,16,16,16,16,16,0,0 .db 16,16,16,16,16,16,16,16,124,124,56,56,16,16,0,0 .db 0,0,8,8,12,12,254,254,12,12,8,8,0,0,0,0 .db 0,0,32,32,96,96,254,254,96,96,32,32,0,0,0,0 .db 0,0,0,0,192,192,192,192,192,192,254,254,0,0,0,0 .db 0,0,36,36,102,102,255,255,102,102,36,36,0,0,0,0 .db 0,0,24,24,60,60,126,126,255,255,255,255,0,0,0,0 .db 0,0,255,255,255,255,126,126,60,60,24,24,0,0,0,0 .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .db 60,24,60,60,60,60,24,60,60,24,0,0,24,24,0,0 .db 102,102,102,102,102,102,0,0,0,0,0,0,0,0,0,0 .db 108,108,108,108,254,254,108,108,254,254,108,108,108,108,0,0 .db 24,24,126,62,96,96,126,60,6,6,126,124,24,24,0,0 .db 0,0,0,0,102,102,108,108,24,24,54,54,102,102,0,0 .db 56,56,108,108,56,56,118,118,220,220,204,204,118,118,0,0 .db 24,24,24,24,56,48,0,0,0,0,0,0,0,0,0,0 .db 12,12,24,24,48,48,48,48,48,48,24,24,12,12,0,0 .db 48,48,24,24,12,12,12,12,12,12,24,24,48,48,0,0 .db 0,0,102,102,60,60,255,255,60,60,102,102,0,0,0,0 .db 0,0,24,24,24,24,126,126,24,24,24,24,0,0,0,0 .db 0,0,0,0,0,0,0,0,0,0,24,24,24,24,56,48 .db 0,0,0,0,0,0,126,126,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,0,0,24,24,24,24,0,0 .db 3,1,7,2,14,4,28,8,56,16,112,32,224,64,192,128 .db 126,60,102,102,110,110,126,126,118,118,102,102,126,60,0,0 .db 24,24,56,56,24,24,24,24,24,24,24,24,60,60,0,0 .db 126,60,102,102,6,6,126,60,96,96,96,96,126,126,0,0 .db 126,60,102,102,6,6,30,28,6,6,102,102,126,60,0,0 .db 102,102,102,102,102,102,126,62,6,6,6,6,6,6,0,0 .db 126,126,96,96,96,96,126,124,6,6,102,102,126,60,0,0 .db 126,60,102,102,96,96,126,124,102,102,102,102,126,60,0,0 .db 126,126,102,102,6,6,12,12,24,24,24,24,24,24,0,0 .db 126,60,102,102,102,102,126,60,102,102,102,102,126,60,0,0 .db 126,60,102,102,102,102,126,62,6,6,102,102,126,60,0,0 .db 0,0,24,24,24,24,0,0,24,24,24,24,0,0,0,0 .db 0,0,24,24,24,24,0,0,24,24,24,24,56,48,0,0 .db 12,12,24,24,48,48,96,96,48,48,24,24,12,12,0,0 .db 0,0,0,0,126,126,0,0,126,126,0,0,0,0,0,0 .db 96,96,48,48,24,24,12,12,24,24,48,48,96,96,0,0 .db 126,60,102,102,6,6,12,12,24,24,0,0,24,24,0,0 .db 254,124,198,198,222,222,222,222,222,220,192,192,252,124,0,0 .db 126,60,102,102,102,102,126,126,102,102,102,102,102,102,0,0 .db 126,124,102,102,102,102,126,124,102,102,102,102,126,124,0,0 .db 126,60,102,102,96,96,96,96,96,96,102,102,126,60,0,0 .db 126,124,102,102,102,102,102,102,102,102,102,102,126,124,0,0 .db 126,126,96,96,96,96,120,120,96,96,96,96,126,126,0,0 .db 126,126,96,96,96,96,120,120,96,96,96,96,96,96,0,0 .db 126,60,102,102,96,96,110,110,102,102,102,102,126,60,0,0 .db 102,102,102,102,102,102,126,126,102,102,102,102,102,102,0,0 .db 60,60,24,24,24,24,24,24,24,24,24,24,60,60,0,0 .db 6,6,6,6,6,6,6,6,102,102,102,102,126,60,0,0 .db 102,102,102,102,108,108,120,120,108,108,102,102,102,102,0,0 .db 96,96,96,96,96,96,96,96,96,96,96,96,126,126,0,0 .db 254,252,214,214,214,214,214,214,198,198,198,198,198,198,0,0 .db 102,102,118,118,126,126,110,110,102,102,102,102,102,102,0,0 .db 126,60,102,102,102,102,102,102,102,102,102,102,126,60,0,0 .db 126,124,102,102,102,102,126,124,96,96,96,96,96,96,0,0 .db 126,60,102,102,102,102,102,102,110,106,102,100,126,58,0,0 .db 126,124,102,102,102,102,126,124,120,120,108,108,102,102,0,0 .db 126,60,102,102,96,96,126,60,6,6,102,102,126,60,0,0 .db 126,126,24,24,24,24,24,24,24,24,24,24,24,24,0,0 .db 102,102,102,102,102,102,102,102,102,102,102,102,126,60,0,0 .db 102,102,102,102,102,102,102,102,102,102,60,60,24,24,0,0 .db 198,198,198,198,198,198,214,214,214,214,214,214,254,252,0,0 .db 198,198,198,198,108,108,56,56,108,108,198,198,198,198,0,0 .db 102,102,102,102,102,102,60,60,24,24,24,24,24,24,0,0 .db 126,126,6,6,12,12,24,24,48,48,96,96,126,126,0,0 .db 60,60,48,48,48,48,48,48,48,48,48,48,60,60,0,0 .db 192,128,224,64,112,32,56,16,28,8,14,4,7,2,3,1 .db 60,60,12,12,12,12,12,12,12,12,12,12,60,60,0,0 .db 16,16,56,56,108,108,198,198,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254 .db 48,48,48,48,56,24,0,0,0,0,0,0,0,0,0,0 .db 0,0,0,0,62,60,6,6,126,62,102,102,126,62,0,0 .db 96,96,96,96,96,96,126,124,102,102,102,102,126,124,0,0 .db 0,0,0,0,126,60,102,102,96,96,102,102,126,60,0,0 .db 6,6,6,6,6,6,126,62,102,102,102,102,126,62,0,0 .db 0,0,0,0,126,60,102,102,126,126,96,96,124,60,0,0 .db 62,28,54,54,48,48,120,120,48,48,48,48,48,48,0,0 .db 0,0,0,0,126,62,102,102,102,102,126,62,6,6,126,124 .db 96,96,96,96,126,124,102,102,102,102,102,102,102,102,0,0 .db 24,24,0,0,24,24,24,24,24,24,24,24,24,24,0,0 .db 6,6,0,0,6,6,6,6,6,6,102,102,102,102,126,60 .db 96,96,96,96,102,102,108,108,120,120,108,108,102,102,0,0 .db 56,56,24,24,24,24,24,24,24,24,24,24,24,24,0,0 .db 0,0,0,0,254,252,214,214,214,214,198,198,198,198,0,0 .db 0,0,0,0,126,124,102,102,102,102,102,102,102,102,0,0 .db 0,0,0,0,126,60,102,102,102,102,102,102,126,60,0,0 .db 0,0,0,0,126,124,102,102,102,102,126,124,96,96,96,96 .db 0,0,0,0,126,62,102,102,102,102,126,62,6,6,6,6 .db 0,0,0,0,126,124,102,102,96,96,96,96,96,96,0,0 .db 0,0,0,0,126,62,96,96,126,60,6,6,126,124,0,0 .db 24,24,126,126,24,24,24,24,24,24,24,24,24,24,0,0 .db 0,0,0,0,102,102,102,102,102,102,102,102,126,62,0,0 .db 0,0,0,0,102,102,102,102,102,102,60,60,24,24,0,0 .db 0,0,0,0,198,198,214,214,214,214,254,254,108,108,0,0 .db 0,0,0,0,198,198,108,108,56,56,108,108,198,198,0,0 .db 0,0,0,0,102,102,102,102,102,102,126,62,6,6,126,124 .db 0,0,0,0,126,126,12,12,24,24,48,48,126,126,0,0 .db 14,14,24,24,24,24,112,112,24,24,24,24,14,14,0,0 .db 24,24,24,24,24,24,0,0,24,24,24,24,24,24,0,0 .db 112,112,24,24,24,24,14,14,24,24,24,24,112,112,0,0 .db 118,118,220,220,0,0,0,0,0,0,0,0,0,0,0,0 .db 0,0,16,16,56,56,108,108,198,198,198,198,254,254,0,0 .db 124,0,198,0,192,0,198,0,124,0,12,0,6,0,124,0 .db 0,0,204,0,0,0,204,0,204,0,204,0,118,0,0,0 .db 28,0,0,0,120,0,204,0,252,0,192,0,120,0,0,0 .db 126,0,129,0,60,0,6,0,62,0,102,0,59,0,0,0 .db 204,0,0,0,120,0,12,0,124,0,204,0,118,0,0,0 .db 224,0,0,0,120,0,12,0,124,0,204,0,118,0,0,0 .db 48,0,48,0,120,0,12,0,124,0,204,0,118,0,0,0 .db 0,0,0,0,124,0,198,0,192,0,120,0,12,0,56,0 .db 126,0,129,0,60,0,102,0,126,0,96,0,60,0,0,0 .db 204,0,0,0,120,0,204,0,252,0,192,0,120,0,0,0 .db 224,0,0,0,120,0,204,0,252,0,192,0,120,0,0,0 .db 204,0,0,0,112,0,48,0,48,0,48,0,120,0,0,0 .db 124,0,130,0,56,0,24,0,24,0,24,0,60,0,0,0 .db 224,0,0,0,112,0,48,0,48,0,48,0,120,0,0,0 .db 198,0,16,0,124,0,198,0,254,0,198,0,198,0,0,0 .db 48,0,48,0,0,0,120,0,204,0,252,0,204,0,0,0 .db 28,0,0,0,252,0,96,0,120,0,96,0,252,0,0,0 .db 0,0,0,0,127,0,12,0,127,0,204,0,127,0,0,0 .db 62,0,108,0,204,0,254,0,204,0,204,0,206,0,0,0 .db 120,0,132,0,0,0,120,0,204,0,204,0,120,0,0,0 .db 0,0,204,0,0,0,120,0,204,0,204,0,120,0,0,0 .db 0,0,224,0,0,0,120,0,204,0,204,0,120,0,0,0 .db 120,0,132,0,0,0,204,0,204,0,204,0,118,0,0,0 .db 0,0,224,0,0,0,204,0,204,0,204,0,118,0,0,0 .db 0,0,204,0,0,0,204,0,204,0,124,0,12,0,248,0 .db 195,0,24,0,60,0,102,0,102,0,60,0,24,0,0,0 .db 204,0,0,0,204,0,204,0,204,0,204,0,120,0,0,0 .db 24,0,24,0,126,0,192,0,192,0,126,0,24,0,24,0 .db 56,0,108,0,100,0,240,0,96,0,230,0,252,0,0,0 .db 204,0,204,0,120,0,48,0,252,0,48,0,252,0,48,0 .db 248,0,204,0,204,0,250,0,198,0,207,0,198,0,195,0 .db 14,0,27,0,24,0,60,0,24,0,24,0,216,0,112,0 .db 28,0,0,0,120,0,12,0,124,0,204,0,118,0,0,0 .db 56,0,0,0,112,0,48,0,48,0,48,0,120,0,0,0 .db 0,0,28,0,0,0,120,0,204,0,204,0,120,0,0,0 .db 0,0,28,0,0,0,204,0,204,0,204,0,118,0,0,0 .db 0,0,248,0,0,0,184,0,204,0,204,0,204,0,0,0 .db 252,0,0,0,204,0,236,0,252,0,220,0,204,0,0,0 .db 60,0,108,0,108,0,62,0,0,0,126,0,0,0,0,0 .db 56,0,108,0,108,0,56,0,0,0,124,0,0,0,0,0 .db 24,0,0,0,24,0,24,0,48,0,102,0,60,0,0,0 .db 0,0,0,0,0,0,252,0,192,0,192,0,0,0,0,0 .db 0,0,0,0,0,0,252,0,12,0,12,0,0,0,0,0 .db 198,0,204,0,216,0,54,0,107,0,194,0,132,0,15,0 .db 195,0,198,0,204,0,219,0,55,0,109,0,207,0,3,0 .db 24,0,0,0,24,0,24,0,60,0,60,0,24,0,0,0 .db 0,0,51,0,102,0,204,0,102,0,51,0,0,0,0,0 .db 0,0,204,0,102,0,51,0,102,0,204,0,0,0,0,0 .db 34,34,136,136,34,34,136,136,34,34,136,136,34,34,136,136 .db 85,85,170,170,85,85,170,170,85,85,170,170,85,85,170,170 .db 221,221,119,119,221,221,119,119,221,221,119,119,221,221,119,119 .db 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24 .db 24,24,24,24,24,24,248,248,24,24,24,24,24,24,24,24 .db 24,24,24,24,248,248,24,24,248,248,24,24,24,24,24,24 .db 54,54,54,54,54,54,246,246,54,54,54,54,54,54,54,54 .db 0,0,0,0,0,0,254,252,54,54,54,54,54,54,54,54 .db 0,0,0,0,248,240,24,24,248,248,24,24,24,24,24,24 .db 54,54,54,54,246,246,6,6,246,246,54,54,54,54,54,54 .db 54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54 .db 0,0,0,0,254,254,6,6,246,246,54,54,54,54,54,54 .db 54,54,54,54,246,246,6,6,254,254,0,0,0,0,0,0 .db 54,54,54,54,54,54,54,54,254,252,0,0,0,0,0,0 .db 24,24,24,24,248,248,24,24,248,240,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,248,240,24,24,24,24,24,24 .db 24,24,24,24,24,24,24,24,31,15,0,0,0,0,0,0 .db 24,24,24,24,24,24,24,24,255,255,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,255,255,24,24,24,24,24,24 .db 24,24,24,24,24,24,24,24,31,31,24,24,24,24,24,24 .db 0,0,0,0,0,0,0,0,255,255,0,0,0,0,0,0 .db 24,24,24,24,24,24,24,24,255,255,24,24,24,24,24,24 .db 24,24,24,24,31,31,24,24,31,31,24,24,24,24,24,24 .db 54,54,54,54,54,54,54,54,55,55,54,54,54,54,54,54 .db 54,54,54,54,55,55,48,48,63,63,0,0,0,0,0,0 .db 0,0,0,0,63,63,48,48,55,55,54,54,54,54,54,54 .db 54,54,54,54,247,247,0,0,255,255,0,0,0,0,0,0 .db 0,0,0,0,255,255,0,0,247,247,54,54,54,54,54,54 .db 54,54,54,54,55,55,48,48,55,55,54,54,54,54,54,54 .db 0,0,0,0,255,255,0,0,255,255,0,0,0,0,0,0 .db 54,54,54,54,247,247,0,0,247,247,54,54,54,54,54,54 .db 24,24,24,24,255,255,0,0,255,255,0,0,0,0,0,0 .db 54,54,54,54,54,54,54,54,255,255,0,0,0,0,0,0 .db 0,0,0,0,255,255,0,0,255,255,24,24,24,24,24,24 .db 0,0,0,0,0,0,0,0,255,255,54,54,54,54,54,54 .db 54,54,54,54,54,54,54,54,63,31,0,0,0,0,0,0 .db 24,24,24,24,31,31,24,24,31,15,0,0,0,0,0,0 .db 0,0,0,0,31,15,24,24,31,31,24,24,24,24,24,24 .db 0,0,0,0,0,0,0,0,63,31,54,54,54,54,54,54 .db 54,54,54,54,54,54,54,54,255,255,54,54,54,54,54,54 .db 24,24,24,24,255,255,24,24,255,255,24,24,24,24,24,24 .db 24,24,24,24,24,24,24,24,248,240,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,31,15,24,24,24,24,24,24 .db 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 .db 0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255 .db 240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240 .db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 .db 255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0 .db 0,0,0,0,118,118,220,220,216,216,220,220,118,118,0,0 .db 0,0,252,120,204,204,252,248,204,204,204,204,220,216,192,192 .db 0,0,126,126,102,102,96,96,96,96,96,96,96,96,0,0 .db 0,0,0,0,254,254,108,108,108,108,108,108,108,108,0,0 .db 126,126,102,102,48,48,24,24,48,48,102,102,126,126,0,0 .db 0,0,0,0,254,126,216,216,216,216,216,216,248,112,0,0 .db 0,0,102,102,102,102,102,102,102,102,124,124,96,96,192,192 .db 0,0,118,118,220,220,24,24,24,24,24,24,24,24,0,0 .db 252,252,48,48,120,120,204,204,204,204,120,120,48,48,252,252 .db 56,56,108,108,198,198,254,254,198,198,108,108,56,56,0,0 .db 56,56,108,108,198,198,198,198,108,108,108,108,238,238,0,0 .db 28,28,48,48,24,24,124,124,204,204,204,204,120,120,0,0 .db 0,0,0,0,126,126,219,219,219,219,126,126,0,0,0,0 .db 6,6,12,12,126,126,219,219,219,219,126,126,96,96,192,192 .db 56,56,96,96,192,192,248,248,192,192,96,96,56,56,0,0 .db 252,120,204,204,204,204,204,204,204,204,204,204,204,204,0,0 .db 0,0,126,126,0,0,126,126,0,0,126,126,0,0,0,0 .db 24,24,24,24,126,126,24,24,24,24,0,0,126,126,0,0 .db 48,48,24,24,12,12,24,24,48,48,0,0,126,126,0,0 .db 12,12,24,24,48,48,24,24,12,12,0,0,126,126,0,0 .db 31,14,27,27,27,27,24,24,24,24,24,24,24,24,24,24 .db 24,24,24,24,24,24,24,24,24,24,216,216,216,216,248,112 .db 24,24,24,24,0,0,126,126,0,0,24,24,24,24,0,0 .db 0,0,118,118,220,220,0,0,118,118,220,220,0,0,0,0 .db 124,56,108,108,108,108,124,56,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,24,24,24,24,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,24,24,0,0,0,0,0,0 .db 15,15,12,12,12,12,12,12,204,204,108,108,60,60,28,28 .db 248,176,216,216,216,216,216,216,0,0,0,0,0,0,0,0 .db 112,112,152,152,48,48,96,96,248,248,0,0,0,0,0,0 .db 0,0,0,0,60,60,60,60,60,60,60,60,0,0,0,0 .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 message1: .db 12 .db "Init GbOs..." .db 10,13,0 message2: .db "Detection du FDC :" .db 0 message3: .db "Ok" .db 10,13,0 message4: .db "Ko" .db 10,13,0 message5: .db "Loading Boot Sector..." .db 10,13,0 message6: .db "Loading FAT..." .db 10,13,0 message7: .db "Loading Root directory..." .db 10,13,0 message8: .db "Open file..." .db 10,13,0 test2: .db "LISEZMOI.TXT" .db 0 .org 08000h .end