_2ksbmod.asm.txt v.1 ;############################################################################################## ;# ;# _2ksbmod 28/10/00 2kb footprint soundblaster music .mod player ;# by olivier.poudade@free.fr 28/10/2000 ;# disclaimer : author not liable for any use ;# ;############################################################################################## ; ; Notes: ; ------ ; Use ScreamTracker3 to compose a standard 4 channel Amiga format .MOD module ; Do not forget to disable "Enable Stereo" In View Order/Variable before save ; Save it as "MUSICMOD.MOD" ; Use 2asm.exe or any other bin2db tool to convert module to asm data. ; Use tasm 4.0+ ; Use tlink 7.0+ ; Use apack 0.97+ ; You can change any of the below default standard config ; Soundblaster address is hardcoded to 220h ; Soundblaster irq is hardcoded to 5 ; Soundblaster dma is hardcoded to 1 ; You can VERIFY the 2KB footprint by commenting ; "INCLUDE MUSICMOD.ASM" (here included at end of sourcecode) ; and decommenting the line following it ; "MUSICMOD db 0" ; ; Makefile: ; --------- ; 2ASM MUSICMOD.MOD ; TASM _2KSBMOD.ASM ; TLINK _2KSBMOD.OBJ ; APACK -T _2KSBMOD.EXE ; DEL _2KSBMOD.EXE ; MOVE OUT.EXE _2KSBMOD.EXE ; CLS ; DIR _2KSBMOD.EXE ;----------------------------------------------------------------------------- .286 .MODEL TINY JUMPS NOSMART STACK 200H SBDEFTEMPO EQU 6 SBDEFBPM EQU 125 SBMIDCRATE EQU 8448 SBVOLTABLE EQU 32767;SIZ=16640 ; db 16640 dup (?) SBDOUBLEBUFFER EQU 49407;SIZ=4096 ; db 4096 dup (?) SBPITCHTABLE EQU 57599;SIZ=1714 ; dw 857 dup (?) SBHEADER EQU 59313;SIZ=1084 ; db 1084 dup (?) SBMODINFO EQU 60397;SIZ=506 ; db 506 dup (?) SBPSP EQU 61143;SIZ=2 ; dw ? SBPROGSIZE EQU 61145;SIZ=2 ; dw ? SBMIXSPEED EQU 61147;SIZ=2 ; dw ? SBORDERPOS EQU 61149;SIZ=1 ; db ? SBTEMPO EQU 61150;SIZ=1 ; db ? SBTEMPOWAIT EQU 61151;SIZ=1 ; db ? SBBPM EQU 61152;SIZ=1 ; db ? SBROW EQU 61153;SIZ=1 ; db ? SBBREAKROW EQU 61154;SIZ=1 ; db ? SBBPMSAMPLES EQU 61155;SIZ=2 ; dw ? SBBUFPTR EQU 61157;SIZ=2 ; dw ? SBBUFLEN EQU 61159;SIZ=2 ; dw ? SBBUFREP EQU 61161;SIZ=2 ; dw ? SBNOTE EQU 61163;SIZ=4 ; dd ? SBADDR EQU 61167;SIZ=2 ; dw ? SBIRQ EQU 61169;SIZ=2 ; dw ? SBDMAFLAG EQU 61171;SIZ=2 ; dw ? SBDMABUFFER EQU 61173;SIZ=2 ; dw ? SBDMAHANDLER EQU 61175;SIZ=4 ; dd ? SBTIMERHANDLER EQU 61179;SIZ=4 ; dd ? SBLOADCOUNT EQU 61183;SIZ=2 ; dw ? SBMODINDEX EQU 61185;SIZ=2 ; dw ? SBSAMPLEBUFF EQU 61187;SIZ=4 ; dd ? SBSAMPLECOUNT EQU 61191;SIZ=2 ; dw ? _SBADDR EQU 220H _SBIRQ EQU 005H ;=========================================== ;EQU ;=========================================== ;=========================================== ;DATA ;=========================================== .data SBMIXBUFFER dw 4096/2 dup (0) SBTRACKS dw 136/2 dup (0) CMAMEM000 dw 0 SBPERIODTABLE dw 856,808,762,720,678,640,604,570,538,508,480,453 dw 428,404,381,360,339,320,302,285,269,254,240,226 dw 214,202,190,180,170,160,151,143,135,127,120,113 SBSINTABLE db 0,25,50,74,98,120,142,162,180,197,212,225 db 236,244,250,254,255,254,250,244,236,225 db 212,197,180,162,142,120,98,74,50,25 ;INCLUDE MUSICMOD.ASM (copied herehunder for practical reasons) MUSICMOD db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,04bh,045h,04eh,053h,048h,049h,020h,05bh,04eh,045h,058h,054h db 045h,04dh,050h,049h,052h,045h,05dh,000h,000h,000h,002h,0e8h,000h,040h,000h,000h db 000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,002h,0e2h,000h,040h,000h,000h,000h,001h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,002h,0f1h,000h,040h,000h,000h,000h,001h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,003h,007h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h db 000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h db 000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h db 000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h db 000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h db 000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h db 000h,001h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,040h,000h,000h,000h,001h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,040h,000h,000h,000h,001h,00ch,07fh,000h,000h,001h,001h,002h,002h,000h,000h db 001h,001h,002h,002h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,04dh,02eh,04bh,02eh,003h,058h,01fh,012h db 000h,000h,00fh,07ah,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,02ch,00ah db 000h,000h,000h,000h,003h,058h,02ch,00ah,000h,000h,000h,000h,003h,058h,03ch,00ah db 000h,000h,000h,000h,003h,058h,03ch,00ah,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,03ch,02dh db 000h,000h,000h,000h,003h,058h,03ch,02dh,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,030h,000h db 000h,000h,000h,000h,003h,058h,030h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,010h,000h db 000h,000h,000h,000h,003h,058h,010h,000h,000h,000h,000h,000h,003h,058h,020h,000h db 000h,000h,000h,000h,003h,058h,020h,000h,000h,000h,000h,000h,003h,058h,040h,000h db 000h,000h,000h,000h,003h,058h,040h,000h,000h,000h,000h,000h,00eh,01bh,013h,012h db 007h,004h,0e9h,0d4h,001h,0dch,0bah,020h,032h,05ah,047h,03bh,05ch,039h,056h,04eh db 000h,09ah,0a7h,092h,0aah,091h,08eh,097h,0d7h,0bdh,0dbh,064h,0d7h,028h,072h,044h db 079h,068h,06bh,07eh,07fh,075h,05dh,066h,068h,055h,06ah,042h,01dh,002h,0a6h,0b6h db 080h,08ch,080h,08ch,080h,09ch,08fh,0d4h,0efh,029h,07bh,078h,07fh,07ch,07fh,07dh db 07fh,075h,061h,068h,003h,0eah,0a2h,082h,084h,081h,084h,081h,083h,082h,083h,082h db 08fh,09ah,0a8h,0d8h,032h,044h,07eh,07ch,07fh,07dh,07fh,07dh,07fh,07dh,07fh,07dh db 07fh,07ch,075h,029h,0cah,0afh,08bh,082h,084h,081h,084h,081h,084h,081h,085h,080h db 087h,080h,0b2h,009h,02bh,074h,076h,07fh,07ch,07fh,07dh,07fh,07dh,07ah,050h,052h db 026h,03bh,015h,020h,03eh,051h,076h,070h,07eh,07eh,07fh,07eh,07fh,07eh,072h,03dh db 00ch,0ddh,0bbh,09ah,08ch,083h,084h,083h,089h,089h,08dh,08eh,086h,086h,083h,083h db 082h,08bh,0a1h,0abh,0b4h,0c0h,0eah,003h,021h,06bh,06eh,07fh,079h,07fh,07ah,07fh db 075h,07eh,058h,064h,048h,026h,008h,0fdh,0cah,0a4h,0b8h,09ah,0a0h,0b2h,0b3h,0b9h db 0d0h,0e2h,014h,00ah,045h,032h,02ch,004h,013h,025h,04bh,04eh,050h,068h,049h,052h db 045h,016h,007h,0feh,0d9h,099h,082h,084h,083h,088h,09ch,0b1h,0cch,0d4h,0ceh,0e9h db 0e6h,0e5h,0ech,0e6h,003h,014h,02ah,020h,033h,049h,05fh,046h,058h,056h,05eh,067h db 051h,079h,06dh,07bh,06ch,068h,065h,05eh,052h,02bh,013h,0ffh,0f9h,0d3h,0ddh,0c6h db 0b3h,0b3h,0ach,0a2h,09ah,0afh,0a3h,0b3h,0a7h,0aah,0bch,0cah,0e1h,0ech,0dch,0cah db 0dah,0d2h,0dfh,004h,025h,020h,019h,01dh,009h,005h,0f3h,0efh,0cbh,0bch,0cbh,0c9h db 0d3h,0f6h,02bh,034h,03dh,035h,012h,0f2h,0d6h,0c6h,0d0h,0e2h,0cah,0dah,003h,01fh db 03fh,05ah,078h,07dh,07fh,07ah,05ch,043h,022h,012h,00ah,01ch,01bh,01fh,012h,01ch db 02ah,053h,045h,05ch,06ah,05fh,071h,068h,06dh,060h,06ah,040h,034h,00ch,0efh,0c9h db 0a1h,098h,08dh,09ah,091h,093h,092h,095h,0a5h,095h,0afh,0b6h,0cdh,0f9h,001h,01bh db 027h,031h,046h,03ch,03fh,03ch,03ch,028h,019h,00ch,0f1h,0f3h,0ddh,0dbh,0c0h,0bbh db 0b2h,09fh,0a4h,0a2h,09eh,09eh,092h,0a2h,09ch,0a8h,0cah,0e6h,0fbh,009h,024h,041h db 04bh,046h,06bh,078h,07fh,07dh,07fh,07dh,07fh,07ah,07dh,072h,053h,041h,03eh,046h db 04dh,04bh,044h,03eh,035h,041h,034h,033h,017h,016h,00bh,0fah,0f4h,0e8h,0d8h,0cch db 0adh,0a6h,094h,08bh,08bh,08bh,094h,089h,087h,083h,082h,082h,083h,082h,083h,081h db 087h,086h,0afh,0e8h,012h,04ch,071h,07eh,07dh,07fh,07eh,07fh,07eh,07fh,076h,04fh db 035h,013h,011h,00ch,002h,016h,014h,020h,01ch,014h,0ffh,004h,0fdh,0eah,0cah,0b5h db 09ch,099h,093h,09fh,0b1h,0cah,0e9h,00dh,02dh,04ch,065h,079h,07ah,07ch,077h,067h db 05ah,046h,03ah,028h,02eh,024h,031h,022h,01bh,000h,0e4h,0dfh,0d6h,0d3h,0cah,0bbh db 0b2h,0c6h,0d6h,0e8h,0f1h,0fah,011h,01eh,02dh,02eh,02dh,01eh,00ah,0f9h,0e1h,0d2h db 0b6h,0b5h,0adh,0adh,0a9h,0a5h,0b2h,0c3h,0d4h,0e4h,0f0h,0f7h,0f1h,0f7h,0fdh,005h db 018h,00fh,0fah,0eah,0e6h,0e7h,0f4h,00fh,020h,031h,03eh,048h,061h,05dh,053h,03eh db 03bh,031h,015h,0fch,001h,004h,001h,00ah,019h,029h,031h,046h,04bh,056h,05ch,056h db 044h,03fh,02bh,026h,01eh,015h,007h,002h,003h,0f6h,0d7h,0cch,0deh,0d7h,0d8h,0cfh db 0c3h,0b1h,0b4h,0a2h,09fh,09ah,0b1h,0bbh,0cfh,0e1h,000h,00bh,020h,01eh,014h,014h db 006h,0f3h,0f4h,008h,0f5h,0e7h,0e7h,0dch,0d8h,0e8h,0fch,010h,028h,03dh,040h,047h db 051h,043h,041h,040h,03ah,01ah,015h,015h,0fbh,0fbh,002h,0fah,0f9h,0feh,007h,010h db 014h,010h,010h,00fh,00ch,003h,0f1h,0e9h,0e5h,0e5h,0e9h,0edh,0e6h,0eeh,0f2h,0f6h db 0f2h,0f5h,0ech,0f9h,0fdh,003h,004h,007h,008h,0fbh,000h,011h,00ah,0f4h,0f0h,0e4h db 0d6h,0e3h,0dbh,0c3h,0c4h,0c8h,0c2h,0c9h,0ddh,0f2h,006h,016h,038h,047h,052h,057h db 045h,03bh,033h,01fh,00ah,0f6h,0fbh,0fbh,0f4h,0eeh,0ech,0f6h,00ch,020h,026h,02ch db 032h,03eh,035h,034h,035h,028h,022h,01eh,019h,015h,011h,00dh,00eh,013h,00fh,016h db 01bh,014h,011h,011h,004h,0fch,0ebh,0e3h,0e8h,0e6h,0dfh,0dah,0dfh,0f1h,0fch,001h db 009h,003h,0ebh,0e7h,0e0h,0dch,0d3h,0c8h,0c4h,0c8h,0cdh,0dah,0eeh,001h,01ch,02bh db 032h,03ch,02fh,02ah,021h,003h,0ebh,0dbh,0c4h,0bch,0ach,0a9h,0b7h,0d3h,0dch,0f7h db 016h,030h,02bh,02dh,023h,02bh,029h,0dah,0d9h,010h,032h,00dh,0e2h,0b5h,0bfh,0c8h db 0e7h,0f7h,00bh,035h,043h,05dh,06fh,064h,067h,073h,07fh,07dh,07fh,07dh,07fh,076h db 056h,032h,004h,0d6h,0b6h,094h,083h,082h,083h,082h,083h,08dh,0ach,0c1h,0c9h,0e2h db 000h,008h,00fh,01fh,02bh,031h,035h,025h,016h,010h,012h,01fh,01eh,026h,03ch,053h db 066h,068h,047h,01dh,001h,0d3h,0abh,09fh,092h,082h,09ah,094h,096h,0a5h,0a0h,09fh db 099h,09eh,0a5h,0a9h,0b5h,0c2h,0d0h,0ech,00dh,038h,065h,075h,07ah,07fh,07eh,07eh db 073h,061h,052h,03ch,01dh,00eh,00fh,015h,013h,015h,017h,031h,040h,04bh,051h,047h db 04bh,044h,033h,026h,010h,0f4h,0d0h,0b0h,0a8h,0a0h,0b1h,0b9h,0bch,0c9h,0d7h,0ebh db 0f6h,0ffh,0fch,0f3h,0f5h,0f2h,0f1h,0f4h,0ech,0ech,0e9h,0d6h,0d8h,0d4h,0d1h,0d3h db 0e2h,0f1h,0efh,0f2h,0f4h,005h,010h,018h,022h,024h,01ah,021h,026h,035h,042h,03dh db 041h,02dh,01eh,008h,001h,0f5h,0ebh,0e6h,0e9h,0fdh,012h,012h,01ah,02eh,040h,054h db 056h,059h,05dh,052h,039h,02dh,01ah,0f3h,0cdh,0b1h,09bh,088h,082h,083h,082h,084h db 086h,08ah,096h,0b4h,0bah,0c4h,0ddh,0f1h,00ch,027h,032h,02eh,02bh,02ah,022h,01fh db 01dh,00dh,002h,0f6h,0eeh,0efh,0ech,0f3h,0f4h,0f9h,0f8h,004h,014h,00bh,009h,012h db 01ah,017h,00fh,00dh,008h,009h,00eh,01ch,01dh,025h,031h,036h,038h,03eh,04ch,053h db 05bh,059h,059h,05dh,051h,043h,031h,01dh,005h,0f1h,0f3h,0efh,0eeh,0edh,0fdh,010h db 01fh,032h,038h,044h,04eh,051h,049h,039h,02bh,013h,00ah,000h,0f0h,0e2h,0dfh,0d9h db 0d0h,0bfh,0bdh,0c2h,0bch,0b9h,0a9h,09ah,095h,091h,08dh,08ch,097h,09bh,096h,09ch db 0a5h,0abh,0b7h,0b8h,0c1h,0d4h,0e6h,0e6h,0e9h,0ech,0f6h,0f2h,0fbh,006h,009h,010h db 01dh,02ah,03ah,046h,043h,045h,054h,04bh,043h,047h,042h,036h,02dh,02bh,029h,021h db 029h,037h,03ah,047h,04dh,047h,04ah,051h,04bh,042h,048h,043h,03bh,033h,02dh,024h db 026h,030h,02bh,02eh,02dh,02bh,02ch,025h,01dh,003h,0f0h,0e6h,0d7h,0d0h,0cah,0bah db 0a6h,0a2h,0a3h,09bh,097h,095h,096h,092h,091h,08eh,086h,086h,082h,084h,08ah,09ch db 0b0h,0bbh,0c7h,0d4h,0e5h,0f9h,00ch,01bh,024h,02bh,025h,026h,030h,032h,02ch,029h db 02bh,02ch,02ah,030h,043h,04dh,056h,061h,06bh,06dh,069h,05ch,04ah,03eh,032h,024h db 013h,000h,0f4h,0edh,0f1h,0f7h,007h,013h,01dh,01dh,00dh,018h,015h,00fh,008h,0ffh db 0f2h,0e2h,0e1h,0dbh,0d8h,0d2h,0cbh,0d0h,0cfh,0d0h,0c9h,0cah,0d1h,0d1h,0d8h,0e2h db 0e7h,0eah,0e9h,0e9h,0dfh,0e9h,0f0h,0eah,0ebh,0e8h,0e0h,0e6h,0edh,0f1h,0f0h,0f1h db 0f3h,0ebh,0edh,000h,00bh,006h,014h,01fh,029h,03bh,03bh,038h,035h,035h,036h,02ah db 02ah,025h,01bh,010h,00eh,009h,002h,009h,006h,003h,00ch,009h,007h,004h,000h,006h db 001h,002h,002h,0fch,0fch,000h,0fah,0f7h,0f2h,0e6h,0e2h,0dfh,0d2h,0c6h,0c9h,0d0h db 0dah,0e7h,0fch,008h,012h,019h,024h,033h,037h,035h,025h,01bh,00fh,0feh,0f5h,0ebh db 0e2h,0e0h,0dch,0dah,0e2h,0f0h,000h,014h,022h,030h,03ch,043h,040h,03ah,02fh,020h db 018h,009h,0f9h,0f2h,0e9h,0e0h,0ddh,0e0h,0edh,0f2h,0feh,00ch,016h,018h,01dh,013h db 008h,0fbh,0f1h,0e7h,0e5h,0e3h,0ddh,0e2h,0e5h,0e6h,0edh,0f1h,0fbh,0fah,0f6h,0ffh db 0ffh,0fdh,000h,0f9h,0f1h,0eah,0ddh,0d9h,0dbh,0ddh,0d6h,0d2h,0d0h,0ceh,0c3h,0c2h db 0c6h,0c4h,0cbh,0d7h,0e3h,0f2h,005h,015h,021h,031h,038h,03fh,045h,03fh,03ah,035h db 030h,02ch,027h,028h,023h,01ch,016h,018h,01ah,012h,014h,011h,010h,011h,010h,010h db 00fh,00eh,008h,00fh,011h,016h,01eh,01eh,019h,00fh,00ah,003h,0ffh,0feh,0f9h,0f7h db 0f8h,0f8h,0ffh,002h,00bh,00eh,008h,003h,008h,006h,003h,0ffh,0f0h,0e1h,0ddh,0d4h db 0cdh,0c6h,0c8h,0ceh,0cfh,0d4h,0e0h,0eah,0edh,0f5h,0fdh,0ffh,000h,0ffh,0ffh,0f9h db 0f5h,0f6h,0f5h,0fdh,000h,0fch,0fdh,0fch,001h,008h,00eh,011h,00fh,012h,00fh,012h db 00dh,004h,007h,006h,000h,0f8h,0f4h,0efh,0e3h,0d6h,0d1h,0d2h,0cfh,0d2h,0d9h,0dfh db 0e9h,0f8h,003h,012h,01fh,024h,02dh,035h,02eh,02ch,02eh,027h,024h,01ah,012h,012h db 00bh,007h,00eh,00bh,012h,016h,019h,01eh,02ah,024h,01ah,017h,012h,00fh,00ah,002h db 0ffh,0fbh,0f3h,0e9h,0e4h,0ddh,0dch,0deh,0ddh,0e6h,0e9h,0e9h,0f4h,0fbh,0ffh,003h db 0d6h,035h,0fah,0a6h,044h,00dh,04dh,021h,010h,025h,0b1h,0f3h,00ah,0f2h,001h,01ch db 04ah,0d7h,02eh,00fh,05fh,0d4h,09eh,07fh,0d0h,099h,0d7h,0cdh,0c6h,05ch,05eh,07fh db 020h,031h,0fch,080h,095h,080h,095h,0a4h,0e4h,05bh,07bh,074h,07fh,078h,078h,05bh db 033h,0afh,081h,088h,08ch,080h,092h,080h,0b0h,012h,021h,05fh,07fh,072h,05ah,01bh db 001h,0e7h,09fh,0a6h,0bbh,081h,0d9h,046h,0f6h,04eh,077h,07fh,065h,044h,00eh,0b6h db 09fh,0edh,01bh,080h,0cfh,0ach,0f1h,0dfh,02eh,073h,065h,07fh,07ch,059h,025h,04ah db 000h,0a8h,0e4h,0a2h,0bch,002h,091h,00bh,0c7h,043h,029h,023h,001h,03eh,08fh,05fh db 033h,091h,0ffh,0bdh,080h,0aeh,0c5h,087h,0d9h,07fh,0eeh,032h,066h,003h,0ddh,044h db 053h,028h,050h,07fh,031h,006h,066h,0fch,001h,0cfh,0b1h,090h,0aah,0a7h,002h,037h db 07fh,010h,001h,07fh,037h,019h,00bh,026h,033h,051h,0d6h,0ffh,0c6h,080h,0f4h,0c8h db 0dfh,07eh,061h,07fh,078h,07fh,051h,007h,0d4h,03fh,0a1h,0a1h,0f6h,008h,0fah,04eh db 0cah,00fh,01eh,07fh,021h,018h,07fh,017h,09bh,073h,0edh,0beh,024h,0b3h,0eah,09eh db 02dh,029h,046h,04ch,037h,07fh,013h,0eeh,043h,080h,0e5h,0b4h,0d8h,0aeh,02fh,0d4h db 077h,0eah,0ech,047h,034h,032h,046h,025h,0e5h,057h,0b8h,028h,08dh,039h,080h,0f6h db 0fch,0e7h,07fh,015h,052h,0d2h,020h,07fh,018h,0beh,061h,036h,04eh,0b0h,057h,021h db 018h,0ebh,001h,0c8h,0b2h,0fdh,0d2h,03dh,0d8h,018h,0feh,03fh,03ah,063h,06dh,030h db 0d0h,069h,0f2h,025h,07fh,015h,026h,060h,0e7h,0afh,0a0h,09eh,0d0h,0b6h,0c3h,04ah db 00ch,037h,053h,065h,054h,07eh,02bh,028h,0edh,020h,080h,0d0h,080h,0aah,0d5h,02bh db 01eh,0d2h,002h,03ah,034h,0e2h,061h,044h,0fch,06bh,0ebh,015h,005h,02fh,0cch,0e0h db 06ch,082h,047h,00eh,0dbh,0ffh,018h,0d6h,0d5h,0e2h,052h,0ffh,000h,006h,00fh,075h db 032h,031h,027h,029h,02bh,013h,022h,02eh,0aah,001h,0b3h,0c9h,0d7h,017h,0e7h,042h db 06eh,04eh,074h,06eh,079h,047h,043h,069h,0d4h,0bbh,0f8h,0c3h,0d1h,0f9h,0fch,0d9h db 0beh,037h,09bh,004h,07fh,03ah,00fh,00eh,061h,0e6h,0ebh,007h,0eah,0d3h,040h,0dah db 0ffh,02fh,064h,016h,018h,051h,0f2h,0efh,01dh,0a8h,0e4h,03bh,0f6h,02fh,03ah,07fh db 058h,06dh,076h,013h,00ah,042h,0b9h,0d0h,0b1h,0c0h,08eh,0eeh,0d2h,028h,03dh,07fh db 02fh,067h,066h,066h,052h,060h,0f3h,027h,0d8h,0f1h,0f4h,0c9h,0dch,0adh,0e0h,0dah db 0f1h,0ffh,03ch,0ffh,03bh,050h,03ch,017h,07ah,0feh,001h,01fh,0f2h,00ah,0e1h,0b7h db 0e5h,0a9h,01dh,0cch,0e4h,0fdh,0e0h,00fh,075h,039h,071h,025h,03eh,06ch,026h,058h db 0feh,0e5h,0a0h,0f6h,0a3h,0b2h,0cch,0b2h,0f1h,0f8h,04fh,024h,02eh,05dh,06fh,05ah db 03ah,00bh,0f5h,0fdh,0e0h,0e3h,0e2h,008h,0e8h,0f3h,037h,004h,018h,017h,0cah,0edh db 0cdh,0d9h,0f0h,02fh,02dh,025h,063h,040h,026h,044h,032h,000h,0b8h,0e9h,0cbh,0aah db 0f5h,0ebh,0fdh,020h,03ch,053h,038h,06fh,048h,02ch,03bh,02dh,0e9h,0deh,01ah,0a4h db 0cfh,007h,0b6h,03bh,010h,032h,013h,029h,009h,030h,0deh,017h,0e8h,0d3h,0f1h,0e6h db 0ebh,03ah,04fh,05dh,055h,045h,01ah,030h,001h,0c7h,0e0h,0f1h,0b5h,0bfh,0d6h,0f8h db 0d8h,014h,017h,036h,03dh,042h,05bh,022h,039h,00eh,0e6h,0deh,0cbh,0a7h,0bch,0e8h db 0c9h,0efh,036h,023h,042h,04dh,040h,01bh,047h,037h,012h,02dh,03fh,024h,023h,014h db 00fh,001h,019h,021h,015h,02ah,01ah,004h,01eh,01dh,007h,0feh,01dh,00ah,019h,023h db 023h,034h,032h,011h,000h,0f2h,0deh,0c2h,0bdh,0cbh,0b9h,0cfh,0f2h,0f7h,005h,00bh db 028h,026h,017h,03bh,031h,033h,015h,00dh,0ddh,0e7h,0ech,0d3h,0e2h,0f9h,0f2h,008h db 015h,035h,029h,046h,040h,035h,030h,029h,011h,009h,016h,004h,0e9h,0fdh,0eah,0deh db 0e3h,0f5h,0f5h,000h,027h,02eh,050h,051h,034h,037h,02ch,00dh,0edh,0ffh,0f1h,0d8h db 0d8h,0f7h,0f6h,0eah,00ch,00dh,018h,023h,01fh,022h,021h,019h,00ah,0fdh,007h,0eeh db 0e9h,0f2h,0feh,0ffh,0fdh,024h,02ah,034h,01fh,01eh,0f8h,0f8h,0f1h,0e9h,0f5h,01ah db 015h,01dh,029h,02ah,027h,01bh,00ch,003h,004h,0f2h,0f6h,0fdh,006h,009h,011h,014h db 005h,01ah,012h,028h,023h,02ch,029h,01eh,00dh,00eh,0feh,0f0h,0ebh,0f4h,0e3h,007h db 0f5h,0feh,00fh,0feh,0ffh,002h,003h,0ebh,0f9h,002h,01dh,021h,023h,032h,02dh,01fh db 00ch,004h,008h,0f3h,006h,0f7h,0f6h,0e8h,0eeh,0fdh,0eah,005h,012h,01eh,040h,040h db 041h,044h,05fh,01fh,006h,013h,036h,042h,010h,0d5h,0b4h,0a6h,095h,08bh,0a0h,0c3h db 0f2h,029h,028h,022h,023h,03dh,057h,078h,07fh,074h,078h,062h,067h,017h,0f5h,0f4h db 0e0h,0cah,087h,0b4h,08ah,084h,083h,082h,09ch,0bfh,000h,059h,07fh,07eh,079h,07dh db 07fh,07eh,07fh,07eh,072h,045h,011h,0ebh,086h,086h,080h,086h,080h,08ah,08ah,0c8h db 01fh,05fh,07fh,07ch,07fh,07dh,07fh,07dh,07fh,075h,056h,03fh,0fch,0a7h,084h,082h db 083h,082h,083h,081h,084h,081h,084h,081h,084h,080h,085h,082h,0c6h,013h,06ah,07fh db 07dh,07fh,07eh,07fh,07eh,07eh,07fh,07eh,07fh,07dh,07fh,054h,0f6h,0b7h,084h,083h db 082h,083h,082h,083h,083h,082h,083h,083h,083h,08ch,0a1h,0c8h,0deh,012h,04ch,073h db 07dh,07dh,07fh,07dh,07fh,07ch,07fh,06ch,04dh,024h,00ah,0f1h,0f0h,002h,00ah,032h db 05ch,077h,07ch,07fh,07dh,07fh,07fh,07ch,06dh,043h,0f3h,0d0h,094h,087h,080h,084h db 081h,084h,081h,084h,081h,085h,084h,088h,08ah,0aah,0c8h,0eeh,009h,04dh,078h,07eh db 07fh,07eh,07eh,07fh,07eh,07fh,07eh,07fh,07ch,072h,050h,046h,025h,0e9h,0c7h,0bah db 0aah,08dh,087h,084h,087h,093h,0a3h,0b6h,0ddh,0d6h,0f4h,0f7h,0f7h,00dh,014h,027h db 038h,04bh,05fh,072h,074h,06ch,04bh,02fh,00dh,0e7h,0b3h,08ah,083h,083h,083h,083h db 083h,085h,090h,0a4h,0d6h,006h,028h,032h,035h,02bh,01dh,012h,008h,00dh,013h,001h db 01bh,048h,044h,050h,06ch,07ah,07dh,07fh,07eh,07fh,07fh,07eh,07fh,06eh,05bh,049h db 031h,020h,0f9h,0fah,0eah,0efh,0f3h,0f6h,0edh,0edh,0efh,0d8h,0bch,0beh,0b5h,0a3h db 0a4h,096h,09ah,0aeh,0c6h,0ddh,0e9h,008h,013h,028h,026h,023h,02dh,013h,002h,0fch db 0f9h,0e9h,0d3h,0cfh,0bbh,0beh,0d2h,0e0h,0ffh,020h,040h,03ch,02eh,01fh,003h,0d7h db 0b3h,08fh,08ah,087h,082h,086h,0b1h,0ddh,0f6h,019h,030h,04eh,060h,060h,059h,052h db 039h,032h,029h,019h,01ah,01bh,019h,027h,03bh,04fh,053h,06dh,07ah,07eh,07eh,07fh db 07eh,07fh,073h,068h,05fh,05eh,03ch,028h,00ch,0feh,0ech,0cfh,0c3h,0afh,09ch,096h db 090h,092h,0a4h,0b7h,0cch,0fbh,022h,048h,062h,06dh,07fh,06ah,052h,047h,02ch,019h db 0f0h,0ddh,0ceh,0beh,0b9h,0b4h,0aah,09fh,0a5h,0a4h,09ah,0a1h,098h,08eh,08ah,090h db 089h,085h,083h,087h,08ch,099h,0beh,0ebh,018h,034h,065h,079h,07eh,07eh,07fh,07eh db 07fh,07bh,06eh,05ah,037h,024h,032h,03ah,03ah,04bh,04ch,051h,05dh,05fh,05dh,057h db 04ch,049h,03ah,02dh,01eh,017h,00ch,009h,0f6h,0f0h,0eeh,0d7h,0c2h,0ach,099h,087h db 083h,083h,082h,083h,082h,084h,081h,08bh,095h,0b1h,0e0h,007h,026h,044h,063h,06bh db 071h,070h,06eh,064h,060h,049h,043h,02ch,029h,01eh,02ah,02bh,01dh,011h,005h,0fdh db 0ech,0e2h,0d0h,0c5h,0b1h,0ach,091h,08ch,081h,085h,082h,097h,0b8h,0deh,0f8h,01eh db 029h,049h,057h,060h,05dh,063h,06dh,069h,073h,06ch,06ch,06ch,062h,059h,05bh,052h db 03ch,021h,0f8h,0ech,0dbh,0d0h,0cfh,0c5h,0cah,0e2h,004h,018h,02dh,034h,040h,047h db 04ch,047h,036h,01ch,0fbh,0d3h,0c5h,0b6h,0ach,0aah,0b2h,0bdh,0cch,0ceh,0dbh,0dfh db 0e4h,0e9h,0dfh,0ddh,0cfh,0d2h,0d1h,0cdh,0cfh,0cbh,0ceh,0c5h,0cbh,0d4h,0e8h,00ah db 02bh,031h,03eh,041h,04eh,04fh,047h,03bh,03ch,03ch,01dh,012h,009h,004h,0fah,0fah db 004h,00fh,021h,034h,044h,059h,06ch,070h,06ch,068h,062h,055h,04ch,046h,039h,02eh db 01fh,009h,0d9h,0bah,0bah,0b0h,0ach,0aeh,0b0h,0b3h,0c5h,0d2h,0cdh,0ddh,0e4h,0f7h db 0f8h,000h,009h,00eh,010h,007h,0fbh,0f0h,0ebh,0e4h,0edh,005h,0fch,005h,00bh,00bh db 0fdh,0f2h,0eeh,0e7h,0ech,0fch,001h,018h,022h,029h,035h,044h,03fh,02ah,020h,024h db 00dh,004h,00bh,0feh,0f5h,0ebh,0f6h,0f3h,0f7h,0f6h,0fbh,00eh,015h,01ch,013h,00fh db 007h,007h,003h,0fdh,0e9h,0e8h,0e9h,0eeh,0eeh,0f5h,0eeh,0fch,002h,00bh,011h,018h db 01eh,018h,011h,01ah,010h,0f4h,0e8h,0d6h,0c5h,0cch,0d1h,0c6h,0cfh,0d6h,0d9h,0dfh db 0eah,000h,014h,020h,033h,036h,034h,037h,02eh,027h,022h,019h,008h,0f7h,0fdh,0f3h db 0f6h,0fch,0f6h,0feh,008h,015h,019h,01ch,027h,035h,03dh,040h,048h,040h,044h,037h db 02bh,020h,010h,008h,0f9h,0f5h,0f4h,000h,015h,019h,023h,027h,01dh,01ah,007h,0fch db 022h,015h,023h,04fh,0ffh,022h,032h,022h,04dh,029h,041h,025h,03bh,03ah,03dh,01bh db 00bh,038h,0eeh,005h,004h,000h,036h,006h,01ch,04dh,0d6h,080h,0a0h,098h,0fbh,044h db 03ah,06bh,071h,06ah,028h,02ah,004h,093h,0aah,0bdh,0adh,0bdh,086h,086h,08bh,08fh db 0c7h,000h,043h,057h,06fh,05dh,056h,023h,02eh,00dh,010h,0b6h,095h,0aeh,0a9h,0c8h db 0e4h,031h,023h,027h,040h,0eeh,003h,0d6h,0e6h,0c3h,0d8h,0e5h,0eah,02ah,006h,03ch db 048h,003h,04ch,04ch,065h,05dh,051h,049h,059h,03dh,0e3h,0f9h,0cdh,0e8h,02dh,02ah db 03ch,038h,04ah,065h,067h,059h,017h,024h,0f9h,0b7h,0deh,0cbh,0c2h,0bbh,0a2h,094h db 094h,0c9h,0b6h,0c0h,0dfh,0f0h,037h,028h,02eh,012h,028h,006h,0f0h,0d2h,0e5h,0cbh db 011h,000h,034h,00eh,033h,007h,0efh,049h,03ch,068h,07fh,07ah,079h,043h,022h,0f6h db 0c3h,0a1h,0bch,0ceh,02dh,005h,008h,025h,0ffh,009h,0d7h,0e8h,0c7h,0c2h,0afh,0a9h db 0b0h,0a8h,0a3h,0abh,0deh,01bh,022h,034h,03dh,020h,011h,0ffh,0dfh,0cfh,0a2h,0ach db 08bh,096h,092h,0a6h,0d2h,0f6h,013h,01dh,053h,069h,076h,05ch,051h,03ah,026h,01dh db 00fh,007h,021h,021h,024h,01dh,02bh,03bh,030h,05ch,03dh,048h,04dh,05ah,075h,05fh db 058h,05ah,04eh,00fh,0c7h,0aah,098h,0b1h,0bfh,0cdh,0d8h,0f6h,008h,0f7h,0f2h,0e7h db 0d5h,0c7h,0b3h,0b5h,0d5h,0d7h,0e8h,0f4h,0fch,0feh,0efh,001h,001h,00ch,0efh,0f6h db 0ech,0e5h,0ech,0e6h,0fch,0feh,0f5h,0edh,0edh,0e0h,0f3h,0f2h,0f8h,005h,0f0h,00fh db 00dh,00ch,00ah,003h,008h,00fh,019h,01eh,029h,039h,055h,05ah,064h,046h,056h,052h db 022h,031h,026h,01ch,017h,00dh,00ah,00eh,01eh,016h,011h,000h,0ffh,0e1h,0dah,0ddh db 0cfh,0bch,0b9h,0b7h,0ach,0c6h,0c6h,0c0h,0ceh,0dah,0dfh,0ech,002h,00bh,004h,0fbh db 0e7h,0eeh,0e4h,0fah,0eah,0f3h,0feh,005h,012h,02ch,02fh,019h,012h,0f4h,0dch,0ddh db 0ddh,0d7h,0e6h,0efh,0fbh,00ah,01dh,01eh,030h,046h,059h,053h,046h,040h,02dh,039h db 028h,01fh,00bh,0f2h,0f8h,0ebh,0eeh,0fch,011h,015h,021h,030h,01bh,01ch,007h,0f1h db 0dch,0d9h,0d2h,0c2h,0c1h,0bch,0c8h,0d4h,0e0h,010h,022h,028h,019h,00bh,0ffh,0ebh db 0e4h,0e2h,0e0h,0eah,0f9h,015h,027h,034h,038h,042h,048h,03ah,02fh,01ch,005h,0f3h db 0e7h,0e2h,0d8h,0d6h,0dbh,0d2h,0d2h,0d4h,0d9h,0eah,0e3h,0f2h,0fch,0feh,0fdh,0f6h db 0f2h,0edh,0e4h,0d4h,0e1h,0edh,0fch,011h,01eh,033h,04eh,064h,062h,058h,049h,03bh db 02bh,016h,0f9h,0e4h,0dch,0d2h,0c2h,0d2h,0efh,001h,014h,020h,025h,025h,01eh,012h db 000h,0e8h,0dfh,0d2h,0c6h,0ceh,0c6h,0beh,0d0h,0e9h,0feh,01ch,032h,032h,03bh,03eh db 034h,01fh,012h,00ah,0fch,0f0h,0efh,0e6h,0ddh,0e8h,0f2h,0e6h,0eah,0efh,0edh,0e3h db 0dah,0dbh,0dch,0e0h,0f1h,0edh,0f0h,0f1h,0eeh,0e8h,0f1h,0efh,0f7h,006h,007h,003h db 007h,00ch,008h,00bh,025h,032h,03dh,041h,046h,054h,062h,063h,05ah,047h,033h,01dh db 00ch,0fdh,0e1h,0d9h,0ddh,0dah,0d6h,0dbh,0efh,005h,015h,01dh,028h,039h,037h,02ch db 01dh,00bh,0ffh,0eeh,0e4h,0e7h,0f2h,0f0h,0f0h,0f3h,0f9h,0fbh,0fch,0f8h,0f0h,0dbh db 0d4h,0cdh,0c8h,0c6h,0c4h,0c0h,0c5h,0d7h,0e2h,0f5h,003h,00ch,019h,018h,018h,01bh db 00ah,004h,0f2h,0e5h,0eeh,0ech,0e5h,0e5h,0e1h,0ech,0fch,011h,013h,00fh,00bh,002h db 0f1h,0e2h,0d5h,0c1h,0b4h,0b4h,0b6h,0cah,0e2h,0fdh,013h,028h,043h,055h,067h,06fh db 071h,065h,05ch,047h,030h,021h,010h,005h,0ffh,002h,009h,004h,00ch,00eh,01bh,01ch db 01ch,023h,022h,01bh,00eh,00ch,00ah,008h,005h,0fah,0f3h,0e8h,0ech,0f0h,0f8h,0fbh db 0f5h,0f2h,0eeh,0e4h,0e7h,0ebh,0ffh,008h,005h,004h,00ah,00bh,00dh,007h,0f8h,0efh db 0e9h,0dfh,0d7h,0cfh,0d4h,0dah,0e0h,0e2h,0ech,001h,008h,00fh,014h,011h,009h,007h db 0fdh,0f4h,0e4h,0e2h,0e0h,0e7h,0f5h,0fbh,005h,00dh,00eh,019h,01dh,021h,01bh,018h db 013h,010h,009h,0f9h,0fbh,0f9h,0f1h,0edh,0f0h,0efh,0edh,0e7h,0e8h,0e6h,0e1h,0e0h db 0e7h,0deh,0dah,0deh,0e3h,0e7h,0f2h,0feh,008h,022h,024h,02dh,03bh,042h,044h,038h db 033h,029h,023h,013h,015h,007h,008h,00bh,00ch,015h,021h,02ch,02eh,034h,034h,030h db 02eh,01ah,007h,0f5h,0dfh,0cbh,0b7h,0b2h,0b0h,0bch,0cch,0deh,0eah,0eeh,0f9h,001h db 008h,009h,007h,001h,0fbh,0f2h,0ebh,0eah,0e6h,0e6h,0f3h,0fdh,006h,00dh,00dh,00eh db 012h,013h,015h,017h,011h,00ah,002h,0f6h,0f0h,0ebh,0eah,0e4h,0e9h,0e4h,0eah,0edh db 0f5h,0f8h,0ffh,002h,008h,003h,006h,0feh,00ah,00ch,021h,033h,036h,024h,023h,013h db 013h,008h,0e8h,0deh,00ah,018h,0c7h,0a9h,082h,08dh,0a3h,0d9h,008h,0e8h,0d7h,03ch db 038h,066h,07eh,069h,0cdh,033h,032h,052h,061h,061h,037h,06eh,031h,0a3h,0b7h,083h db 08eh,08ah,082h,083h,083h,093h,045h,07fh,06eh,04dh,071h,078h,060h,07fh,057h,04eh db 0ffh,0d6h,0a1h,082h,083h,085h,080h,090h,0d0h,012h,06dh,06bh,07fh,078h,07fh,07bh db 07fh,072h,070h,038h,0fch,001h,019h,09fh,08bh,088h,082h,082h,083h,082h,082h,083h db 082h,083h,081h,084h,080h,086h,086h,0d5h,01fh,05dh,07fh,07ah,07fh,07ch,07fh,07dh db 07fh,07dh,07fh,07eh,07eh,07ch,03ch,011h,0f8h,0bch,095h,080h,086h,080h,085h,080h db 085h,080h,086h,080h,08ah,084h,0d4h,0d4h,000h,053h,065h,071h,067h,07eh,06eh,067h db 052h,03dh,021h,0f4h,0cch,09bh,0a5h,0b0h,0feh,03ch,075h,079h,07fh,07ch,07fh,07ch db 07fh,078h,077h,062h,05ah,014h,0d9h,0b7h,08ah,093h,089h,083h,083h,083h,082h,083h db 082h,083h,083h,083h,087h,090h,0afh,0cah,00ch,047h,071h,07ah,07dh,07fh,07eh,07fh db 07eh,07fh,07fh,07eh,07fh,072h,06ch,054h,025h,00bh,0d5h,0a4h,089h,089h,08ch,08ch db 090h,0a2h,087h,0adh,0a5h,0aeh,0c4h,0c6h,0c7h,0d5h,006h,025h,059h,071h,060h,06ah db 06ah,056h,068h,02ah,0eah,0c3h,092h,085h,083h,084h,082h,083h,083h,08fh,0b0h,0c3h db 0f2h,003h,000h,020h,00eh,01bh,020h,013h,02dh,010h,010h,018h,00eh,01eh,04fh,058h db 06bh,05fh,063h,077h,077h,078h,07eh,07ch,06bh,07ch,07ch,07bh,076h,05eh,04bh,049h db 047h,03eh,033h,023h,0efh,0cfh,098h,087h,093h,0a0h,091h,097h,08ah,0aah,0b4h,0cbh db 0e1h,0cfh,0e2h,0e5h,0e9h,0e8h,0efh,0d7h,0dfh,0c4h,0b3h,0b1h,0adh,095h,09fh,0a0h db 0b1h,0c9h,0f0h,0fdh,02ah,057h,027h,023h,010h,0d7h,0c1h,092h,08bh,08ah,084h,081h db 08bh,0a8h,0c9h,010h,024h,046h,05fh,075h,073h,067h,04eh,021h,04dh,036h,042h,066h db 069h,05fh,065h,079h,079h,07fh,07bh,07fh,07ah,07fh,072h,06dh,072h,05ch,036h,03fh db 016h,00dh,0f1h,0cfh,0ebh,0abh,0ach,0a5h,09ch,095h,096h,0aah,087h,0a7h,0bch,0cch db 00fh,013h,045h,04dh,058h,067h,053h,05fh,043h,032h,00dh,0d9h,0cfh,092h,090h,08fh db 085h,082h,083h,082h,083h,082h,082h,083h,082h,083h,082h,084h,082h,09dh,0aah,0cbh db 0ech,011h,03ch,05ch,074h,07ch,07fh,07dh,07fh,07dh,07fh,07ch,07fh,07ah,076h,062h db 065h,078h,077h,076h,077h,067h,063h,060h,064h,03ah,020h,011h,0f1h,0d6h,0e1h,0cdh db 0c9h,0d3h,0d6h,0dbh,0e6h,0efh,0f0h,0dah,0bfh,0b9h,094h,085h,083h,085h,081h,084h db 081h,084h,084h,096h,09eh,0efh,018h,018h,040h,05eh,067h,061h,06ah,04ah,05bh,047h db 02ah,030h,021h,00fh,005h,012h,017h,01bh,02dh,016h,026h,016h,0f6h,0fah,0f3h,0d6h db 0d1h,0b3h,0b1h,09ah,09ah,0a0h,0bdh,0d2h,0e3h,0feh,019h,037h,04fh,05eh,05fh,055h db 055h,034h,032h,037h,02eh,03ah,039h,02fh,03ah,03bh,03ah,01fh,000h,0eeh,0d9h,0d2h db 0d9h,0d6h,0d7h,0ddh,0feh,002h,017h,020h,025h,02ah,021h,029h,024h,021h,00ah,0e8h db 0d8h,0c1h,0b8h,0b2h,0b2h,0c9h,0bah,0afh,0b6h,0a1h,0b1h,0c9h,0cdh,0dbh,0d3h,0e5h db 0cdh,0dfh,0f2h,0edh,000h,0eah,0efh,0eeh,0ffh,00dh,030h,032h,03ah,041h,03eh,040h db 042h,023h,01ch,029h,00eh,00fh,010h,00ch,014h,007h,00bh,0f9h,012h,00dh,011h,030h db 031h,048h,045h,048h,04ah,058h,043h,03fh,03dh,01fh,014h,00eh,0e9h,0b6h,0c1h,0b8h db 0ach,0adh,0b1h,0a9h,0bah,0bfh,0a8h,0b4h,0c0h,0d6h,0deh,0e5h,0feh,007h,007h,016h db 00dh,006h,0f3h,0f4h,0dah,0f8h,009h,0ffh,002h,00eh,0fdh,0eeh,0ebh,0eeh,0e8h,000h db 011h,014h,024h,01ch,037h,048h,04eh,059h,03ch,033h,025h,004h,0f5h,0f5h,0e4h,0e2h db 0e3h,0f3h,0f9h,00bh,010h,014h,013h,014h,002h,003h,0f8h,0f2h,0f0h,0ddh,0d4h,0d0h db 0dfh,0d3h,0e0h,0cdh,0dch,0ddh,001h,004h,00dh,010h,00ch,00ch,000h,004h,009h,0f1h db 0d8h,0d5h,0c1h,0c1h,0d7h,0cch,0c4h,0e8h,0d6h,0ddh,0fah,006h,00eh,022h,025h,032h db 02dh,032h,025h,027h,01eh,011h,010h,0f8h,0f4h,0fbh,0f5h,002h,008h,0f6h,0fbh,015h db 012h,01eh,02ah,028h,028h,02dh,02ch,030h,02ch,02fh,01fh,01dh,014h,00bh,0feh,0f8h db 0f7h,0f4h,009h,01ah,01dh,022h,01dh,013h,000h,0f9h,0ech,0fdh,0e9h,0ddh,0d9h,0cah db 0dbh,0deh,0e5h,0f1h,0efh,0d8h,0e1h,0dbh,0d3h,0d4h,0c8h,0c4h,0d3h,0cfh,0d4h,0f1h db 0f8h,019h,0e9h,0e3h,0f6h,003h,015h,028h,017h,029h,028h,025h,02dh,00bh,009h,03ch db 0f8h,00dh,029h,012h,055h,01dh,032h,009h,039h,060h,042h,002h,0d8h,025h,02ah,00ah db 010h,0fah,0c2h,0e5h,0eah,0d5h,0c8h,030h,064h,05eh,0d4h,0e4h,0f5h,08dh,0f2h,074h db 01dh,073h,056h,0fbh,0bah,083h,0a3h,0a4h,080h,0a6h,029h,062h,07fh,07ah,07fh,061h db 02ah,0c9h,092h,08eh,080h,088h,083h,099h,0d4h,049h,07fh,07bh,067h,071h,037h,021h db 028h,00dh,018h,0c1h,0b3h,0b2h,089h,0b0h,0ffh,003h,00ch,051h,07fh,0ebh,004h,013h db 0ech,0ddh,08eh,002h,080h,0efh,038h,069h,0f0h,067h,060h,077h,06fh,07fh,00bh,0e9h db 059h,021h,0b2h,099h,098h,080h,0afh,0dch,0c7h,07fh,020h,02eh,055h,069h,01ah,005h db 0ebh,09fh,0c8h,0adh,047h,09eh,0d0h,046h,0e2h,0e3h,07fh,0bfh,005h,016h,014h,080h db 032h,0fbh,0bfh,0f7h,038h,02eh,0f5h,07fh,055h,0deh,0e8h,038h,0bdh,02ch,09ah,0b5h db 0f6h,0c0h,0deh,046h,062h,06ah,03bh,03eh,071h,077h,049h,070h,0eeh,01fh,0cah,0b2h db 0b0h,088h,080h,0afh,097h,0d9h,049h,057h,04ch,062h,079h,048h,004h,01bh,064h,08dh db 0a4h,0cch,0dfh,034h,04ah,0d2h,0dch,050h,07dh,0f6h,056h,07ah,027h,009h,07fh,0c2h db 0c3h,0f4h,08eh,0aeh,080h,019h,0cbh,0d2h,014h,0bfh,00bh,0b5h,02bh,05eh,0d2h,02ch db 0b9h,0f5h,09bh,05dh,0b7h,07fh,0aah,00ch,006h,0e7h,013h,016h,05fh,034h,041h,02fh db 007h,0dbh,03ch,080h,017h,0e2h,0dfh,04dh,022h,006h,0aeh,039h,014h,0b8h,092h,049h db 045h,00ah,0b8h,023h,0eeh,0dfh,0fbh,0fbh,0ebh,043h,06dh,07ch,060h,04bh,059h,04ah db 005h,055h,057h,076h,031h,038h,03fh,097h,01eh,0c3h,080h,0cdh,0f4h,0e5h,09dh,0e8h db 058h,05ah,0f8h,022h,01bh,0cah,0abh,0b2h,080h,01dh,0c9h,0fdh,02ch,032h,02bh,088h db 058h,080h,0c3h,0f7h,035h,016h,00eh,03ah,06fh,008h,028h,040h,00eh,014h,05dh,0cdh db 013h,01dh,0c1h,0bah,09eh,0a6h,080h,0efh,0c8h,0e1h,0f7h,01fh,0feh,00ch,05eh,07ch db 041h,06ah,01bh,05ah,07eh,01ah,00dh,03ah,010h,019h,0eah,027h,0c4h,008h,02bh,0d1h db 034h,049h,077h,02eh,074h,019h,0e9h,0cdh,0cfh,0aah,08ch,0c5h,0ceh,080h,0d8h,0feh db 0c6h,021h,050h,045h,05fh,063h,066h,0bch,020h,044h,0c7h,0beh,0e7h,0feh,0e7h,0ffh db 03fh,01bh,040h,062h,0b2h,0eeh,0b9h,0bah,0b8h,0fch,02fh,01fh,07fh,062h,01bh,07fh db 010h,030h,024h,0fch,020h,0cch,015h,0fah,09eh,0ebh,009h,0b8h,03dh,03fh,024h,046h db 063h,033h,075h,07ah,010h,0efh,014h,092h,0d8h,0c5h,005h,0b4h,045h,0eeh,030h,01eh db 003h,0fch,0cdh,0ech,0fah,0b0h,011h,0d8h,0afh,0f8h,021h,0fch,030h,069h,0d4h,031h db 041h,004h,03fh,0ech,0c3h,0b2h,0a2h,0e3h,080h,009h,0e2h,012h,065h,07dh,070h,07ah db 02ch,03bh,0ffh,0b1h,0e1h,08fh,08ah,0a3h,0bfh,095h,01eh,0fdh,011h,05eh,06bh,07fh db 072h,049h,067h,039h,0fch,000h,0b6h,0dah,0d7h,0e8h,0deh,008h,029h,0dch,01ah,000h db 0cbh,00ah,0b6h,0dah,0ech,0f9h,0e6h,030h,021h,005h,02bh,024h,0f7h,0ddh,0ddh,0e3h db 0b8h,0c8h,00fh,0efh,0fch,030h,019h,023h,041h,043h,045h,04bh,054h,022h,00dh,024h db 0dbh,0adh,0c6h,0bdh,0a2h,0f8h,0f8h,0cch,02ch,0fah,006h,0ech,009h,0f9h,009h,0fch db 045h,00ah,03fh,043h,037h,023h,031h,0e6h,0efh,0d0h,0abh,0b5h,0e6h,0d6h,0deh,017h db 02eh,00dh,02fh,02eh,029h,016h,012h,0fdh,0deh,0dah,0d4h,0b2h,0cch,0dfh,0e0h,00bh db 02ch,00bh,00eh,050h,01ah,017h,03eh,01bh,0fdh,010h,00ah,005h,021h,03bh,02fh,038h db 033h,013h,017h,016h,001h,0edh,0fdh,0f5h,0dah,0f7h,007h,0e8h,0e8h,00fh,009h,021h db 042h,054h,058h,05dh,03eh,01dh,0fah,0c9h,0adh,091h,090h,08bh,095h,0d0h,0e7h,00ah db 01ch,045h,042h,03ch,052h,04ah,021h,012h,001h,0d0h,0cdh,0cbh,0afh,0c1h,0e0h,0deh db 0fdh,01ah,03eh,035h,050h,038h,02ch,021h,023h,00dh,001h,00dh,0ffh,0f5h,01ah,013h db 003h,009h,007h,002h,0f4h,0ffh,0fbh,004h,00eh,0f9h,006h,019h,017h,012h,028h,018h db 00fh,004h,01fh,0feh,0deh,0e8h,0e1h,0e4h,0ebh,0f0h,0fch,004h,00dh,010h,027h,03ah db 02fh,02ah,026h,023h,01bh,00eh,01bh,00fh,011h,0fdh,0fbh,0d4h,0c9h,0d6h,0d2h,0e9h db 011h,026h,02fh,03fh,03ch,02ch,023h,000h,0edh,0e5h,0cah,0d0h,0ceh,0e5h,0f0h,007h db 02bh,02eh,054h,041h,045h,035h,021h,015h,0f5h,0edh,0deh,0e0h,0d9h,0e6h,0e6h,0efh db 01ah,011h,020h,02ah,013h,0f8h,0eeh,0d1h,0bch,0b9h,0bch,0d9h,0f0h,0feh,023h,02ch db 036h,035h,03eh,040h,029h,02bh,00bh,0f8h,0d9h,0d5h,0d2h,0cch,0e1h,0f1h,0f9h,01ah db 02eh,033h,04dh,05eh,03dh,035h,03dh,010h,0f0h,0eah,0e1h,0cah,0c7h,0d3h,0d4h,0e5h db 0efh,0fch,0fdh,009h,008h,0fdh,018h,00dh,020h,006h,042h,0eah,0fdh,020h,00eh,049h db 042h,0f8h,0d2h,0a5h,0cah,0c5h,02bh,01dh,0e6h,062h,02eh,00ah,0fah,01ch,024h,071h db 03ah,0f1h,094h,0a6h,0ech,04fh,0ebh,041h,0d8h,0a5h,0eeh,0f3h,0f3h,0f8h,024h,02ah db 0f0h,0f9h,043h,0efh,061h,056h,07dh,06fh,07fh,06ah,011h,0e9h,0fah,0d9h,0c8h,0b4h db 082h,084h,088h,080h,0d5h,027h,0ffh,000h,0fch,0f0h,0c2h,0ddh,0d6h,0c6h,01dh,00dh db 0ddh,040h,04eh,03eh,053h,06dh,07dh,057h,061h,036h,01fh,0c3h,0ach,0d7h,0c6h,0cch db 0b9h,0dch,0b9h,0d5h,0ceh,0c1h,0c2h,0e4h,0f8h,0d9h,0b4h,0b1h,0a5h,0d4h,0b3h,0c7h db 0a1h,0cbh,0cch,0d1h,0c5h,0eeh,01eh,025h,05eh,04bh,054h,043h,05ch,041h,048h,04eh db 030h,07dh,05eh,079h,05eh,065h,03eh,062h,067h,04ah,030h,00dh,0dch,0eah,0cdh,0e0h db 0e8h,0e5h,0ceh,0beh,0d1h,0c4h,0deh,0c6h,0c0h,0b8h,0aeh,0b9h,095h,0beh,0d6h,0e9h db 0f3h,0f4h,00fh,01bh,01ah,0dbh,00bh,0f2h,0f7h,01dh,0f8h,000h,0f0h,00bh,0fbh,0feh db 009h,0f3h,0e0h,01ch,00ch,0f9h,00dh,007h,016h,031h,003h,00eh,0ebh,020h,020h,065h db 058h,071h,05ah,059h,05bh,03ah,05ch,06bh,038h,04bh,061h,036h,04eh,041h,008h,004h db 00eh,0fch,0f1h,0e9h,0ffh,0f3h,00ch,001h,0fdh,00ah,0f6h,0e7h,0c2h,0aah,09fh,0a1h db 097h,0c3h,0a6h,0bah,0d5h,0d2h,0dbh,0f3h,0f4h,00dh,0fdh,014h,0ech,0ceh,0e6h,0d4h db 0f1h,0e6h,0f7h,0c6h,0d0h,0e1h,0c9h,0d7h,0dfh,0c9h,0e6h,0fch,011h,019h,031h,04eh db 024h,045h,057h,04dh,052h,046h,03bh,02dh,038h,036h,03ah,03dh,043h,039h,032h,03bh db 03eh,038h,057h,046h,03fh,068h,05bh,048h,035h,014h,007h,0dfh,0e4h,0bfh,0c9h,0c5h db 0dah,0f0h,007h,00dh,00eh,011h,02ah,019h,003h,0f8h,0f0h,0dbh,0d4h,0e4h,0d8h,0dah db 0c7h,0ceh,0d0h,0e0h,0e5h,0ebh,0e5h,0e9h,0e0h,0ebh,001h,003h,0ffh,005h,0f3h,0eeh db 0d2h,0d3h,0c2h,0dah,0bch,0cah,0dbh,0f6h,00ch,010h,023h,020h,007h,00ah,0fbh,0f1h db 0e8h,0e3h,0deh,0e0h,0e5h,0d7h,0e5h,0f8h,0f7h,006h,00ah,001h,00dh,0ffh,01ch,00ah db 0f8h,0fch,0f1h,0fdh,0fah,0f6h,0fbh,0fah,007h,0fdh,013h,015h,024h,00eh,01bh,015h db 004h,0feh,018h,0feh,008h,016h,019h,022h,01dh,02ch,02dh,027h,023h,015h,014h,0fbh db 0fbh,0f1h,0f3h,0f4h,0f9h,0f6h,0ebh,0fdh,0fbh,0f4h,0fch,002h,0d2h,0d5h,0cfh,0cbh db 0d3h,0e6h,043h,039h,047h,044h,01dh,038h,0f8h,0deh,0a5h,092h,098h,0bch,01dh,046h db 070h,07fh,07ch,07fh,07ch,07eh,030h,0aeh,081h,086h,082h,083h,082h,085h,0b9h,01eh db 068h,07fh,07bh,07fh,076h,06ch,026h,0efh,0bfh,08ch,081h,08bh,097h,0cdh,01ah,062h db 070h,036h,02bh,009h,0d8h,0dfh,0cfh,0ach,0a1h,09eh,08fh,0a6h,0c8h,0d1h,0f4h,056h db 05dh,03dh,072h,045h,02fh,04bh,036h,0e6h,0b2h,09dh,093h,0a4h,0dbh,017h,043h,07ah db 074h,06ah,073h,074h,062h,060h,05bh,025h,011h,01fh,030h,004h,00fh,01eh,0ech,0ech db 02dh,0eah,0e1h,0dbh,0e9h,004h,022h,048h,04bh,012h,00ch,00fh,0dch,0e7h,0e2h,0c0h db 0ach,09bh,082h,09bh,0a6h,0ceh,0f4h,013h,024h,04dh,048h,053h,051h,03fh,00bh,0d8h db 0a8h,09ah,084h,097h,092h,0a3h,0c8h,0fah,018h,028h,054h,04ah,030h,030h,014h,017h db 0e2h,0dch,0d3h,0deh,0e3h,0d9h,0e9h,0fdh,01ch,024h,026h,040h,02fh,048h,037h,026h db 01ah,000h,002h,0f1h,0fdh,0fdh,0f6h,018h,013h,019h,017h,03ch,016h,01dh,025h,002h db 001h,0f8h,0fah,0fah,019h,00bh,0fbh,0ffh,0fdh,015h,0f6h,006h,0f7h,0feh,0f3h,002h db 0ebh,0f8h,0f9h,0f2h,0e9h,0eeh,0e0h,0f4h,003h,012h,006h,009h,01eh,010h,009h,01ah db 011h,01bh,000h,005h,0f0h,0eeh,0e2h,0eah,0e5h,0dah,0e0h,0e4h,0e1h,0e7h,0eah,012h db 013h,00dh,020h,002h,0feh,0fbh,00ah,001h,0fah,001h,0fdh,0fdh,009h,0fah,0f0h,0e7h db 0e1h,0d0h,0d2h,0dch,0d3h,0e2h,00ch,014h,02ch,033h,034h,02eh,03ch,036h,01ah,010h db 0ffh,0e9h,0d2h,0bfh,0b7h,0bbh,0c8h,0cch,0e0h,00ah,00eh,03ah,057h,05eh,05fh,03ah db 034h,0f7h,0f6h,0e2h,0cah,0c1h,0bfh,0d0h,0d1h,0efh,001h,00bh,020h,02eh,02fh,034h db 032h,018h,01ah,01ch,009h,005h,0f8h,0f9h,0f7h,0f4h,00dh,007h,0fah,0ffh,0ffh,0f8h db 0f2h,0f3h,0f9h,0ffh,0fch,011h,014h,01fh,01dh,023h,024h,007h,0f7h,0dch,0cfh,0cbh db 0c1h,0d5h,0d2h,0d9h,0f7h,004h,019h,028h,038h,035h,043h,042h,02bh,02ah,014h,000h db 0feh,0f6h,0e8h,0dah,0e5h,0e7h,0eeh,0f5h,000h,0fah,0f7h,0fdh,0f8h,0e7h,0e6h,0e1h db 0e3h,0e3h,0e8h,0e5h,0ech,0f1h,0edh,0f5h,0eeh,0edh,0e9h,0ech,0ebh,0f0h,0f6h,0fch ;padding 16*4=64+10176=1240=10kb db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h db 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h ;MUSICMOD db 0 ;=========================================== ;CODE ;=========================================== .586 .code START: mov ax,@Data ; DS points to my DATA mov ds,ax ; segment. mov word ptr fs:[SBPSP],es ; Save the SBPSP address. mov bx,ss ; Shrinks my Memory Block mov cx,sp ; to get more core for shr cx,4 ; the MODule data. add bx,cx sub bx,word ptr fs:[SBPSP] inc bx mov word ptr fs:[SBPROGSIZE],bx ; Save my Program Size. ShrinkProg: mov ax,4A00h ; Shrink! mov bx,word ptr fs:[SBPROGSIZE] int 21h mov ah,48h mov bx,1000h int 21h mov ds:[CMAMEM000],ax mov fs,ax mov dx,220h ; SB Port Address Found! mov cx,5 ; mov word ptr fs:[SBADDR],dx ; SB Port Address Found! ; mov word ptr fs:[SBIRQ],cx push bp mov bp,sp pusha push ds push es pusha push es mov ax,ds mov es,ax mov di,SBMODINFO mov cx,506;Size ModInfoRec cld xor ax,ax ClearModInfo1: mov byte ptr fs:[di],al inc di loop ClearModInfo1 pop es popa push ds pop es mov si,offset MUSICMOD mov di,SBHEADER mov cx,1084 mov word ptr fs:[SBLOADCOUNT],cx HeaderCopy: mov al,byte ptr ds:[SI] mov byte ptr fs:[di],al cmpsb ;inc si/inc di loop HeaderCopy mov al,byte ptr fs:[SBHEADER+950] ;mhOrderLen mov byte ptr fs:[SBMODINFO],al mov al,byte ptr fs:[SBHEADER+951] ;mhReStart cmp al,byte ptr fs:[SBHEADER+950] ;mhOrderLen jb SetReStart mov al,7Fh SetReStart: mov byte ptr fs:[SBMODINFO+1],al mov cx,128 xor ax,ax xor bx,bx CopyOrder: mov ah,byte ptr fs:[SBHEADER+bx+952] ;mhOrder+bx mov byte ptr fs:[SBMODINFO+2+bx],ah cmp ah,al jb NextOrder mov al,ah NextOrder: inc bx loop CopyOrder xor bx,bx mov bl,al inc bx push bx shl bx,6 mov ax,4800h int 21h pop bx mov Word Ptr fs:[SBMODINFO+130],0 mov Word Ptr fs:[SBMODINFO+132],ax mov si,offset MUSICMOD add si,word ptr fs:[SBLOADCOUNT] les di,dword ptr fs:[SBMODINFO+130] mov cx,bx shl cx,10 add word ptr fs:[SBLOADCOUNT],cx rep movsb mov si,SBHEADER+20 ;lea mhSamples xor di,di CopySamples: mov ax,word ptr fs:[si+22] xchg al,ah shl ax,1 mov word ptr fs:[SBMODINFO+258+di],ax mov al,byte ptr fs:[si+25] xor ah,ah mov word ptr fs:[SBMODINFO+444+di],ax mov ax,word ptr fs:[si+26] xchg al,ah shl ax,1 mov word ptr fs:[SBMODINFO+320+di],ax mov ax,word ptr fs:[si+28] xchg al,ah shl ax,1 mov word ptr fs:[SBMODINFO+382+di],ax add si,30 ;Size ModSample add di,2 cmp di,62 jb CopySamples xor si,si AllocSamples: mov bx,word ptr fs:[SBMODINFO+258+si] shr bx,4 je NextSample push si inc bx mov ax,4800h int 21h pop si mov word ptr fs:[SBMODINFO+134+si],0 mov word ptr fs:[SBMODINFO+196+si],ax push si push di push word ptr fs:[SBMODINFO+196+si] pop es mov cx,word ptr fs:[SBMODINFO+258+si] mov di,word ptr fs:[SBMODINFO+134+si] mov si,offset MUSICMOD add si,word ptr fs:[SBLOADCOUNT] add word ptr fs:[SBLOADCOUNT],cx rep movsb pop di pop si NextSample: add si,2 cmp si,62 jb AllocSamples Failed: pop es pop ds popa pop bp PlayNow: mov word ptr fs:[SBMIXSPEED],10240;22000 ; Mixing at 22 kHz Sbinit: pusha push ds push es StartPlaying: pusha push ds push es SetModParms: mov byte ptr fs:[SBORDERPOS],0 mov byte ptr fs:[SBTEMPO],SBDEFTEMPO mov byte ptr fs:[SBTEMPOWAIT],SBDEFTEMPO mov byte ptr fs:[SBBPM],SBDEFBPM mov byte ptr fs:[SBROW],64 mov byte ptr fs:[SBBREAKROW],0 mov ax,word ptr fs:[SBMIXSPEED] xor dx,dx mov bx,24*SBDEFBPM/60 div bx mov word ptr fs:[SBBPMSAMPLES],ax ClearTracks: mov di,offset SBTRACKS mov ax,ds mov es,ax mov cx,136 ;NumTracks * (Size TrackInfo) xor ax,ax cld rep stosb mov word ptr fs:[SBBUFPTR],ax mov word ptr fs:[SBBUFLEN],ax MakePitch: mov ax,SBMIDCRATE mov bx,428 mul bx div word ptr fs:[SBMIXSPEED] xor dh,dh mov dl,ah mov ah,al xor al,al mov cx,857 xor bx,bx mov di,SBPITCHTABLE PitchLoop: push ax push dx cmp dx,bx jae NoDiv div bx NoDiv: mov word ptr fs:[di],ax add di,2 pop dx pop ax inc bx loop PitchLoop MakeVolume: mov cx,16640 mov bx,cx VolLoop: dec bx mov al,bl imul bh mov byte ptr fs:[SBVOLTABLE+bx],ah loop VolLoop pop es pop ds popa cli in al,21h push ax mov al,11111111b out 21h,al SetBuffer: mov word ptr fs:[SBDMAFLAG],0 mov ax,SBDOUBLEBUFFER mov word ptr fs:[SBDMABUFFER],ax mov dx,ds mov bx,dx shr dh,4 shl bx,4 add ax,bx adc dh,0 mov cx,ax neg cx cmp cx,2048 jae SetDma add word ptr fs:[SBDMABUFFER],cx add ax,cx adc dh,0 SetDma: mov bx,ax mov cx,2048 dec cx mov al,05h out 0Ah,al xor al,al out 0Ch,al mov al,bl out 02h,al mov al,bh out 02h,al mov al,dh out 83h,al mov al,cl out 03h,al mov al,ch out 03h,al mov al,59h out 0Bh,al mov al,01h out 0Ah,al ClearBuffer: mov di,word ptr fs:[SBDMABUFFER] mov cx,2048 mov ax,ds mov es,ax mov al,80h cld rep stosb SetIrq: xor ax,ax mov es,ax ; mov bx,word ptr fs:[SBIRQ] ; add bx,08h ; shl bx,2 mov bx,(_SBIRQ+8)*4 fld dword ptr es:[bx+0] fstp dword ptr fs:[SBDMAHANDLER+0] mov ax,offset SbIrqHandler mov word ptr es:[bx+0],ax mov word ptr es:[bx+2],cs SetTimer: fld dword ptr es:[70h+0] fstp dword ptr fs:[SBTIMERHANDLER+0] mov ax,offset SbPoll mov word ptr es:[70h],ax mov word ptr es:[72h],cs ; mov dx,word ptr fs:[SBADDR] ; add dx,06h mov dx,226h mov al,1 out dx,al in al,dx in al,dx in al,dx in al,dx xor al,al out dx,al mov cx,100 WaitId2: ; mov dx,word ptr fs:[SBADDR] ; add dx,0Eh mov dx,22eh in al,dx or al,al js GetID2 loop WaitId2 jmp Exit GetId2: ; mov dx,word ptr fs:[SBADDR] ; add dx,0Ah mov dx,22ah in al,dx cmp al,0AAh je SbOk loop WaitId2 jmp Exit SbOk: ; mov dx,word ptr fs:[SBADDR] ; add dx,0Ch mov dx,22ch SbOutWait04: in al,dx or al,al js SbOutWait04 mov al,0D1h out dx,al mov ax,1000 mul ax div word ptr fs:[SBMIXSPEED] neg al mov ah,al ; mov dx,word ptr fs:[SBADDR] ; add dx,0Ch mov dx,22ch SbOutWait05: in al,dx or al,al js SbOutWait05 mov al,40h out dx,al SbOutWait06: in al,dx or al,al js SbOutWait06 mov al,ah out dx,al SbOutWait07: in al,dx or al,al js SbOutWait07 mov al,14h out dx,al SbOutWait08: in al,dx or al,al js SbOutWait08 mov al,0ffh out dx,al SbOutWait09: in al,dx or al,al js SbOutWait09 mov al,0ffh out dx,al Exit: pop ax ; mov cx,word ptr fs:[SBIRQ] mov cx,_sbirq mov ah,1 shl ah,cl not ah and al,ah out 21h,al sti pop es pop ds popa jmp overISRs SbIrqHandler: push ax push dx push ds mov ax,@Data mov ds,ax ; mov dx,word ptr fs:[SBADDR] ; add dx,0Eh mov dx,22eh in al,dx sub dx,02h SbOutWait01: in al,dx or al,al js SbOutWait01 mov al,14h out dx,al SbOutWait02: in al,dx or al,al js SbOutWait02 mov al,0ffh out dx,al SbOutWait03: in al,dx or al,al js SbOutWait03 mov al,0ffh out dx,al mov al,20h out 20h,al pop ds pop dx pop ax iret SbPoll: pusha push ds push es mov ax,@Data mov ds,ax GetDmaCount: in al,03h mov cl,al in al,03h mov ch,al mov ax,word ptr fs:[SBDMAFLAG] test ax,ax jne SecondHalf FirstHalf: cmp cx,1024 jae Bye mov si,word ptr fs:[SBDMABUFFER] mov cx,1024 mov word ptr fs:[SBSAMPLEBUFF+2],ds mov word ptr fs:[SBSAMPLEBUFF+0],si mov word ptr fs:[SBSAMPLECOUNT],cx call GetSamples inc word ptr fs:[SBDMAFLAG] jmp Bye SecondHalf: cmp cx,1024 jb Bye mov si,word ptr fs:[SBDMABUFFER] mov cx,1024 add si,cx mov word ptr fs:[SBSAMPLEBUFF+2],ds mov word ptr fs:[SBSAMPLEBUFF+0],si mov word ptr fs:[SBSAMPLECOUNT],cx call GetSamples dec word ptr fs:[SBDMAFLAG] Bye: pop es pop ds popa iret overISRS: DEMOLOOP: MOV AH,1 ; IN AL,60H INT 16H ; DAS JZ DEMOLOOP ; JC DEMOLOOP SbDone: cli in al,21h push ax mov al,11111111b out 21h,al xor ax,ax mov es,ax ; mov bx,word ptr fs:[SBIRQ] ; add bx,08h ; shl bx,2 mov bx,(_SBIRQ+8)*4 fld dword ptr fs:[SBDMAHANDLER+0] fstp dword ptr es:[bx+0] fld dword ptr fs:[SBTIMERHANDLER+0] fstp dword ptr es:[70h+0] ; mov dx,word ptr fs:[SBADDR] ; add dx,0Ch mov dx,22ch SbOutWait10: in al,dx or al,al js SbOutWait10 mov al,0D0h out dx,al SbOutWait11: in al,dx or al,al js SbOutWait11 mov al,0D3h out dx,al pop ax ; mov cx,word ptr fs:[SBIRQ] mov cx,_sbirq mov ah,1 shl ah,cl or al,ah out 21h,al sti FreeModule: pusha push ds push es mov ax,@Data mov ds,ax FreePatterns: mov ax,4900h mov bx,Word Ptr fs:[SBMODINFO+132] test bx,bx je FreeSamples mov es,bx int 21h FreeSamples: xor si,si FreeLoop: mov ax,word ptr fs:[SBMODINFO+258+si] mov bx,word ptr fs:[SBMODINFO+196+si] test ax,ax je FreeNext test bx,bx je FreeNext push si mov ax,4900h mov es,bx int 21h pop si FreeNext: add si,2 cmp si,62 jb FreeLoop pusha push es mov ax,ds mov es,ax mov di,SBMODINFO mov cx,506;Size ModInfoRec cld xor ax,ax ClearModInfo2: mov byte ptr fs:[di] ,al inc di loop ClearModInfo2 pop es popa pop es pop ds popa mov ax,4c00h int 21h ;-------------------------------------------------------------------------- BeatTrack: mov dx,word ptr ds:[di+18] test dx,dx je noVolSlide cmp dh,00h je Arpeggio cmp dh,01h je PortUp cmp dh,02h je PortDown cmp dh,03h je TonePort cmp dh,04h jne noVibrato jmp Vibrato noVibrato: cmp dh,05h jne noPortSlide jmp PortSlide noPortSlide: cmp dh,06h jne noVibSlide jmp VibSlide noVibSlide: cmp dh,0Ah jne noVolSlide jmp VolSlide add di,34 noVolSlide: ret Arpeggio: mov bx,word ptr ds:[di+32] mov ax,word ptr ds:[di+26+bx] mov word ptr ds:[di+16],ax add bx,2 cmp bx,6 jb SetArpIndex xor bx,bx SetArpIndex: mov word ptr ds:[di+32],bx ret PortUp: xor dh,dh mov bx,word ptr ds:[di+14] sub bx,dx cmp bx,113 jge NotSmall mov bx,113 NotSmall: mov word ptr ds:[di+14],bx add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+16],ax ret PortDown: xor dh,dh mov bx,word ptr ds:[di+14] add bx,dx cmp bx,856 jle NotBig mov bx,856 NotBig: mov word ptr ds:[di+14],bx add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+16],ax ret TonePort: xor dh,dh mov ax,word ptr ds:[di+20] mov bx,word ptr ds:[di+14] cmp bx,ax je NoPort jg PortToUp PortToDown: add bx,dx cmp bx,ax jle SetPort FixPort: mov bx,ax jmp SetPort PortToUp: sub bx,dx cmp bx,ax jl FixPort SetPort: mov word ptr ds:[di+14],bx add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+16],ax NoPort: ret Vibrato: mov dh,dl and dl,0Fh shr dh,4 shl dh,2 add byte ptr ds:[di+23],dh mov dh,byte ptr ds:[di+23] mov bl,dh shr bl,2 and bx,1Fh mov al,byte ptr ds:[SBSINTABLE+bx] mul dl rol ax,1 xchg al,ah and ah,1 test dh,dh jns VibUp neg ax VibUp: add ax,word ptr ds:[di+14] mov bx,ax cmp bx,113 jge NoLoVib mov bx,113 NoLoVib: cmp bx,856 jle NoHiVib mov bx,856 NoHiVib: add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+16],ax ret PortSlide: call VolSlide mov dl,byte ptr ds:[di+22] jmp TonePort VibSlide: call VolSlide mov dl,byte ptr ds:[di+24] jmp Vibrato VolSlide: mov dh,dl and dl,0Fh shr dh,4 mov al,byte ptr ds:[di+12] sub al,dl jge NoLoVol xor al,al NoLoVol: add al,dh cmp al,64 jbe NoHiVol mov al,64 NoHiVol: mov byte ptr ds:[di+12],al ret ;-------------------------------------------------------------------------- GetTrack: seges lodsw xchg al,ah mov bl,ah and ah,0Fh mov cx,ax seges lodsw xchg al,ah mov bh,ah and ah,0Fh mov dx,ax mov word ptr ds:[di+18],dx and bl,0F0h shr bh,4 or bl,bh je SetPeriod SetSample: xor bh,bh dec bx add bx,bx mov ax,word ptr fs:[SBMODINFO+444+bx] mov byte ptr ds:[di+12],al mov ax,word ptr fs:[SBMODINFO+134+bx] mov Word Ptr ds:[di],ax mov ax,word ptr fs:[SBMODINFO+196+bx] mov Word Ptr ds:[di+2],ax mov ax,word ptr fs:[SBMODINFO+258+bx] mov word ptr ds:[di+6],ax mov ax,word ptr fs:[SBMODINFO+320+bx] mov word ptr ds:[di+8],ax mov ax,word ptr fs:[SBMODINFO+382+bx] mov word ptr ds:[di+10],ax SetPeriod: test cx,cx je SetEffect mov word ptr ds:[di+20],cx cmp dh,03h je SetEffect mov word ptr ds:[di+14],cx mov bx,cx add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+16],ax mov word ptr ds:[di+4],0 SetEffect: test dx,dx je InitNone cmp dh,00h jne noInitArpeggio jmp InitArpeggio noInitArpeggio: cmp dh,03h je InitTonePort cmp dh,04h je InitVibrato cmp dh,09h je SampleOfs cmp dh,0Bh je PosJump cmp dh,0Ch je SetVolume cmp dh,0Dh je Break cmp dh,0Fh je SetSpeed add di,34 InitNone: ret InitTonePort: test dl,dl jne SetPortParm mov dl,byte ptr ds:[di+22] SetPortParm: mov byte ptr ds:[di+22],dl mov word ptr ds:[di+18],dx ret InitVibrato: mov al,byte ptr ds:[di+24] mov ah,al and al,0Fh and ah,0F0h test dl,0Fh jne OkDepth or dl,al OkDepth: test dl,0F0h jne OkRate or dl,ah OkRate: mov byte ptr ds:[di+24],dl mov word ptr ds:[di+18],dx test cx,cx je OkPos mov byte ptr ds:[di+23],0 OkPos: ret SampleOfs: test dl,dl jne SetSampleOfs mov dl,byte ptr ds:[di+25] SetSampleOfs: mov byte ptr ds:[di+25],dl mov dh,dl xor dl,dl mov word ptr ds:[di+4],dx ret PosJump: mov byte ptr fs:[SBORDERPOS],dl mov byte ptr fs:[SBROW],64 ret SetVolume: cmp dl,64 jbe OkVol mov dl,64 OkVol: mov byte ptr ds:[di+12],dl ret Break: mov dh,dl and dl,0Fh shr dh,4 add dh,dh add dl,dh shl dh,2 add dl,dh mov byte ptr fs:[SBBREAKROW],dl mov byte ptr fs:[SBROW],64 ret SetSpeed: test dl,dl je Skip cmp dl,31 ja SetBpm SetTempo: mov byte ptr fs:[SBTEMPO],dl mov byte ptr fs:[SBTEMPOWAIT],dl ret SetBpm: mov byte ptr fs:[SBBPM],dl mov al,103 mul dl mov bl,ah xor bh,bh mov ax,word ptr fs:[SBMIXSPEED] xor dx,dx div bx mov word ptr fs:[SBBPMSAMPLES],ax Skip: ret InitArpeggio: mov dh,dl and dl,0Fh shr dh,4 mov cx,36 xor bx,bx mov ax,word ptr ds:[di+14] ScanPeriod2: cmp ax,word ptr ds:[SBPERIODTABLE+bx] jae SetArp add bx,2 loop ScanPeriod2 SetArp: add dx,dx add dh,bl add dl,bl mov bx,word ptr ds:[SBPERIODTABLE+bx] add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+26],ax mov bl,dh xor bh,bh mov bx,word ptr ds:[SBPERIODTABLE+bx] add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+28],ax mov bl,dl xor bh,bh mov bx,word ptr ds:[SBPERIODTABLE+bx] add bx,bx mov ax,word ptr fs:[SBPITCHTABLE+bx] mov word ptr ds:[di+30],ax mov word ptr ds:[di+32],0 ret ;-------------------------------------------------------------------------- MixTrack: cmp word ptr ds:[si+10],2 ja MixLooped MixNonLooped: les dx,[si] mov bx,word ptr ds:[si+4] mov bp,word ptr ds:[si+6] push dx push si add bx,dx add bp,dx mov dx,word ptr ds:[si+16] mov al,byte ptr ds:[si+12] mov ah,byte ptr ds:[si+13] mov si,bx mov bh,al mov al,dl mov dl,dh xor dh,dh nlMixSamp: cmp si,bp jae nlMixBye mov bl,byte ptr es:[si] mov bl,byte ptr fs:[SBVOLTABLE+bx] add byte ptr ds:[di],bl inc di add ah,al adc si,dx loop nlMixSamp nlMixBye: mov bx,si pop si pop dx sub bx,dx mov word ptr ds:[si+4],bx mov byte ptr ds:[si+13],ah ret MixLooped: les dx,[si] mov bx,word ptr ds:[si+4] mov bp,word ptr ds:[si+10] mov word ptr fs:[SBBUFREP],bp add bp,word ptr ds:[si+8] push dx push si add bx,dx add bp,dx mov dx,word ptr ds:[si+16] mov al,byte ptr ds:[si+12] mov ah,byte ptr ds:[si+13] mov si,bx mov bh,al mov al,dl mov dl,dh xor dh,dh lpMixSamp: cmp si,bp jb lpMixNow sub si,word ptr fs:[SBBUFREP] lpMixNow: mov bl,byte ptr es:[si] mov bl,byte ptr fs:[SBVOLTABLE+bx] add byte ptr ds:[di],bl inc di add ah,al adc si,dx loop lpMixSamp lpMixBye: mov bx,si pop si pop dx sub bx,dx mov word ptr ds:[si+4],bx mov byte ptr ds:[si+13],ah ret ;-------------------------------------------------------------------------- GetSamples: pusha push ds push es cld mov es,word ptr fs:[SBSAMPLEBUFF+2] mov di,word ptr fs:[SBSAMPLEBUFF+0] mov bx,word ptr fs:[SBSAMPLECOUNT] NextChunk: cmp word ptr fs:[SBBUFLEN],0 je noCopyChunk jmp CopyChunk noCopyChunk: push bx push di push es MixChunk: mov di,offset SBMIXBUFFER mov cx,word ptr fs:[SBBPMSAMPLES] mov word ptr fs:[SBBUFPTR],di mov word ptr fs:[SBBUFLEN],cx mov ax,ds mov es,ax mov al,80h rep stosb mov si,offset SBTRACKS mov word ptr fs:[SBMODINDEX],bx mov di,word ptr fs:[SBBUFPTR] mov cx,word ptr fs:[SBBUFLEN] call MixTrack add si,34 mov di,word ptr fs:[SBBUFPTR] mov cx,word ptr fs:[SBBUFLEN] call MixTrack add si,34 mov di,word ptr fs:[SBBUFPTR] mov cx,word ptr fs:[SBBUFLEN] call MixTrack add si,34 mov di,word ptr fs:[SBBUFPTR] mov cx,word ptr fs:[SBBUFLEN] call MixTrack add si,34 UpdateTracks: dec byte ptr fs:[SBTEMPOWAIT] je GetTracks BeatTracks: mov di,offset SBTRACKS ;NumTracks=4,Size TrackInfo=34 call BeatTrack call BeatTrack call BeatTrack call BeatTrack jmp noUpdate GetTracks: mov al,byte ptr fs:[SBTEMPO] mov byte ptr fs:[SBTEMPOWAIT],al les si,dword ptr fs:[SBNOTE] cmp byte ptr fs:[SBROW],64 jb NoPattWrap les si,dword ptr fs:[SBMODINFO+130] mov bl,byte ptr fs:[SBORDERPOS] cmp bl,byte ptr fs:[SBMODINFO] jb NoOrderWrap mov bl,byte ptr fs:[SBMODINFO+1] mov byte ptr fs:[SBORDERPOS],bl cmp bl,byte ptr fs:[SBMODINFO] jae NoUpdate NoOrderWrap: xor bh,bh mov bl,byte ptr fs:[SBMODINFO+2+bx] shl bx,10 add si,bx mov bl,byte ptr fs:[SBBREAKROW] mov byte ptr fs:[SBROW],bl xor bh,bh mov byte ptr fs:[SBBREAKROW],bh shl bx,4 add si,bx mov word Ptr fs:[SBNOTE+0],si mov word Ptr fs:[SBNOTE+2],es inc byte ptr fs:[SBORDERPOS] NoPattWrap: inc byte ptr fs:[SBROW] cld mov di,offset SBTRACKS ;NumTracks=4,Size TrackInfo=34 call GetTrack call GetTrack call GetTrack call GetTrack mov word Ptr fs:[SBNOTE+0],si NoUpdate: pop es pop di pop bx CopyChunk: mov cx,word ptr fs:[SBBUFLEN] cmp cx,bx jbe MoveChunk mov cx,bx MoveChunk: mov si,word ptr fs:[SBBUFPTR] add word ptr fs:[SBBUFPTR],cx sub word ptr fs:[SBBUFLEN],cx sub bx,cx rep movsb test bx,bx je noNextChunk jmp NextChunk noNextChunk: pop es pop ds popa ret ;-------------------------------------------------------------------------- end start