Small DOS 2.5 COM-File loader for Demo#
reverse engineered from ABBUC Hobbytronic Demo 1992, done by Benji-Soft (Juergen Schildmann und Stefan Duesterhoeft), maybe based on prior work from Peter Sabbath.
01000 .LI OFF 01010 ************************ 01020 ** HOBBY TRONIC LOADER * 01030 ** 2004 BY C. STROTMANN* 01040 ** FROM HT92 LOADER * 01050 ************************ 01060 ; 01070 RTCLOK = $12 01080 SOUNDR = $41 01090 ATRACT = $4D 01100 NMIEN = $D40E 01110 IRQEN = $D20E 01120 POKMSK = $10 01130 SCOLOR = $02C4 01140 SDMCTL = $022F 01150 DMACTL = $D400 01160 VDSLST = $200 01170 COLOR = $D016 01180 WSYNC = $D40A 01190 DLIST = $D402 01200 SDLSTL = $0230 01210 CHBASE = $D409 01220 CHBAS = $02F4 01230 PORTB = $D301 01240 DSKIV = $E450 01250 VVBLKI = $0222 01260 VVBLKD = $0224 01270 AUDF1 = $D200 01280 HPOSPL = $D000 01290 SFLNUM = $067D ; FIL# 01300 ; 01310 SYSVBV = $E45F 01320 XITVBV = $E462 01330 ; 01340 DDEVIC = $300 01350 DUNIT = $301 01360 DCMND = $302 01370 DBUF = $304 01380 DBYT = $308 01390 DAUX = $30A 01400 ; 01410 SIOV = $E453 01420 ZMEMPTR = $D0 01430 RUNAD = $02E0 01440 INITAD = $02E2 01450 ; 01460 .OR $0600 01470 ; .OF D:HTLOAD.COM 01480 ; 01490 SECBUF 01500 BOOTHT 01510 .HX 00 01520 NUMSEC .HX 08 01530 BASEADR .HX 0006 01540 INIT .HX A906 01550 ; 01560 JMP START 01570 ------------------------------ 01580 DL 01590 .HX 7070707070 01600 .HX 7070707070 01610 .HX 707070F070 01620 .HX 42 01630 .DA TEXT 01640 .HX 70707041 01650 .DA DL 01660 ------------------------------ 01670 TEXT 01680 .AT " BOOTBLOCK STILL OK :) " 01690 ------------------------------ 01700 COLTAB 01710 .HX C2C2C4C4C6C6C8C8 01720 .HX CACACCCCCCCCCACA 01730 .HX C8C8C6C6C4C4C2C2 01740 SPARE .HX 00 01750 ------------------------------ 01760 START 01770 LDA #0 01780 STA RTCLOK+2 01790 STA RTCLOK+1 01800 STA NMIEN ; NMI OFF 01810 STA SCOLOR+1 01820 LDA #DLI 01830 STA VDSLST ; SET DLI 01840 LDA /DLI 01850 STA VDSLST+1 01860 LDA #DL 01870 STA SDLSTL 01880 LDA /DL 01890 STA SDLSTL+1 01900 LDA #$C0 01910 STA NMIEN ; NMI ON 01920 WAIT 01930 LDA RTCLOK+2 01940 CMP #$64 01950 BNE WAIT 01960 JMP DEMOLOAD 01970 ------------------------------ 01980 DLI 01990 PHA ;SAV ACCU 02000 TXA 02010 PHA ;SAV X 02020 LDX #0 02030 .1 02040 LDA COLTAB,X 02050 STA WSYNC 02060 STA COLOR+2 02070 STA COLOR+4 02080 INX 02090 CPX #$19 02100 BNE .1 02110 PLA 02120 TAX 02130 PLA 02140 RTI 02150 ------------------------------ 02160 MEMPTR .DA $0600 02170 NUMBYT .HX 7F 02180 SECTOR .HX 0000 02190 STARTADR .HX 0000 02200 ENDADR .HX 0000 02210 DEMOCNT .HX 00 02220 DIRBUF 02230 DIRFLG .HX 00 02240 FILELEN .HX 0000 02250 STARTSEC .HX 0000 02260 FILENAME .HX 0000000000000000 02270 .HX 00000000000000 02280 DEMOFLG .HX 00 02290 FILENUM .HX 00 02300 .HX 40 ; ?? 02310 ------------------------------ 02320 DL2 .HX 7042 02330 .DA TEXT2 02340 .HX 41 02350 .DA DL2 02360 ------------------------------ 02370 TEXT2 02380 .AT " HOBBYTRONIC DEMO 2004 LOADING ... " 02390 ------------------------------ 02400 READSEC 02410 LDA #$31 02420 STA DDEVIC 02430 LDA #$1 02440 STA DUNIT 02450 LDA #$52 ; READ 02460 STA DCMND 02470 LDA MEMPTR 02480 STA DBUF 02490 LDA MEMPTR+1 02500 STA DBUF+1 02510 LDA NUMBYT 02520 STA DBYT 02530 LDA NUMBYT+1 02540 STA DBYT+1 02550 LDA SECTOR 02560 STA DAUX 02570 LDA SECTOR+1 02580 STA DAUX+1 02590 ; 02600 JSR SIOV 02610 ; 02620 RTS 02630 ------------------------------ 02640 SECOFF .HX 00 02650 ; 02660 GETBYTSEC ; GET NEXT BYTE 02670 ; FROM SECTOR 02680 LDY SECOFF 02690 LDA SECBUF,Y 02700 PHA 02710 INC SECOFF 02720 LDA SECOFF 02730 CMP #$7D ; DATA IN SECTOR 02740 BNE .1 02750 LDA #0 02760 STA SECOFF 02770 JSR SECCHAIN 02780 .1 02790 PLA 02800 RTS 02810 ------------------------------ 02820 BUF 02830 ------------------------------ 02840 .OR $780 02850 DEMOLOAD 02860 JMP INITDL 02870 ------------------------------ 02880 GETCOMHEAD 02890 JSR GETBYTSEC 02900 STA STARTADR 02910 JSR GETBYTSEC 02920 STA STARTADR+1 02930 ; 02940 LDA STARTADR 02950 CMP #$FF 02960 BNE .1 02970 LDA STARTADR+1 02980 CMP #$FF 02990 BNE .1 03000 ; 03010 JSR GETBYTSEC 03020 STA STARTADR 03030 JSR GETBYTSEC 03040 STA STARTADR+1 03050 .1 03060 JSR GETBYTSEC 03070 STA ENDADR 03080 JSR GETBYTSEC 03090 STA ENDADR+1 03100 ; 03110 LDA STARTADR 03120 STA ZMEMPTR 03130 LDA STARTADR+1 03140 STA ZMEMPTR+1 03150 LDA RUNAD 03160 BNE .2 03170 LDA RUNAD+1 03180 BNE .2 03190 ; 03200 LDA STARTADR 03210 STA RUNAD 03220 LDA STARTADR+1 03230 STA RUNAD+1 03240 .2 03250 RTS 03260 ------------------------------ 03270 SECCHAIN 03280 LDX #$7D 03290 LDA SECBUF,X 03300 AND #3 03310 STA SECTOR+1 03320 INX 03330 LDA SECBUF,X 03340 STA SECTOR 03350 JMP READSEC 03360 ------------------------------ 03370 DLIRTI RTI 03380 ------------------------------ 03390 MINIDL 03400 .HX 7041 03410 .DA MINIDL 03420 ------------------------------ 03430 INITDL 03440 LDA #MINIDL 03450 STA SDLSTL 03460 STA DLIST 03470 LDA /MINIDL 03480 STA SDLSTL+1 03490 STA DLIST+1 03500 ; FRAME BLACK 03510 LDA #0 03520 STA SCOLOR+4 03530 STA COLOR+4 03540 ; IO SOUND ETC 03550 STA SOUNDR 03560 STA ATRACT 03570 STA SDMCTL 03580 STA DMACTL 03590 ; RESET FONT 03600 LDA #$E0 03610 STA CHBASE 03620 STA CHBAS 03630 ; 03640 LDX #5 03650 .1 03660 STA SCOLOR,X 03670 STA COLOR,X 03680 DEX 03690 BPL .1 03700 ; 03710 STA IRQEN 03720 STA NMIEN 03730 STA POKMSK 03740 SEI 03750 LDA PORTB 03760 ORA #3 03770 STA PORTB ; ROM ON 03780 ; 03790 LDA #$40 03800 STA IRQEN 03810 STA POKMSK 03820 CLI 03830 ; 03840 LDA #0 03850 STA SCOLOR+2 03860 STA SCOLOR+4 03870 ; 03880 LDA #$E 03890 STA COLOR+1 03900 STA SCOLOR+1 03910 ; 03920 LDA #SYSVBV 03930 STA VVBLKI 03940 LDA #XITVBV 03950 STA VVBLKD 03960 ; 03970 LDA /SYSVBV 03980 STA VVBLKI+1 03990 STA VVBLKD+1 04000 ; 04010 LDA #DLIRTI 04020 STA VDSLST 04030 LDA /DLIRTI 04040 STA VDSLST+1 04050 ; 04060 LDA #DL2 04070 STA SDLSTL 04080 LDA /DL2 04090 STA SDLSTL+1 04100 ; 04110 NOSOUND 04120 LDX #7 04130 LDA #0 04140 .1 04150 STA AUDF1,X 04160 STA HPOSPL,X 04170 DEX 04180 BPL .1 04190 CLRSTACK 04200 PHA 04210 LDX #0 04220 .1 04230 LDA #0 04240 STA $100,X 04250 INX 04260 BNE .1 04270 ; 04280 LDA #$FF 04290 STA $1FF 04300 .2 04310 PLA 04320 BEQ .2 04330 ; 04340 LDA #$60 04350 STA NMIEN ; VBI OFF 04360 LDA #$22 04370 STA SDMCTL 04380 STA DMACTL ; DMA ON 04390 JSR DSKIV 04400 ; 04410 LDA #0 04420 STA RUNAD 04430 STA RUNAD+1 04440 STA INITAD 04450 STA INITAD+1 04460 STA DEMOFLG 04470 READDIR 04480 LDA #$69 04490 STA SECTOR 04500 LDA #1 04510 STA SECTOR+1 04520 JSR READSEC 04530 LDA DEMOCNT 04540 ASL 04550 ASL 04560 ASL 04570 ASL ; * 16 04580 TAX 04590 LDY #0 04600 .1 04610 LDA SECBUF,X 04620 STA DIRBUF,Y 04630 INX 04630 INX 04640 INY 04650 CPY #$10 04660 BNE .1 04670 ; 04680 LDA STARTSEC 04690 STA SECTOR 04700 LDA STARTSEC+1 04710 STA SECTOR+1 04720 JSR READSEC 04730 ; 04740 LDA #0 04750 STA SECOFF 04760 JSR GETCOMHEAD 04770 LDA SFLNUM 04780 AND #$FC 04790 STA FILENUM 04800 JMP GETSEG 04810 ------------------------------ 04820 LOADDEMO 04830 JSR GETCOMHEAD 04840 ; 04850 GETSEG 04860 JSR GETBYTSEC 04870 PHA 04880 LDA SFLNUM 04890 AND #$FC 04900 CMP FILENUM 04910 BEQ .1 04920 PLA 04930 JMP NEXTDEMO 04940 .1 04950 PLA 04960 LDY #0 04970 STA (ZMEMPTR),Y 04980 LDA ZMEMPTR+1 04990 CMP ENDADR+1 05000 BNE .2 05010 LDA ZMEMPTR 05020 CMP ENDADR 05030 BEQ .4 05040 .2 05050 INC ZMEMPTR 05060 BNE .3 05070 INC ZMEMPTR+1 05080 .3 05090 JMP GETSEG 05100 .4 05110 LDA STARTADR+1 05120 CMP #2 05130 BNE DISPATCH 05140 LDA STARTADR 05150 CMP #$E2 05160 BNE DISPATCH 05170 ; 05180 LDA ZMEMPTR 05190 PHA 05200 LDA ZMEMPTR+1 05210 PHA 05220 JSR JINITAD 05230 PLA 05240 STA ZMEMPTR+1 05250 PLA 05260 STA ZMEMPTR 05270 ; 05280 DISPATCH 05290 LDA DEMOFLG 05300 BNE NEXTDEMO 05310 LDA SFLNUM 05320 AND #3 05330 BNE LOADDEMO 05340 LDA SFLNUM+1 05350 BNE LOADDEMO 05360 LDA SECOFF 05370 CMP SFLNUM+2 05380 BCS NEXTDEMO 05390 INC DEMOFLG 05400 JMP LOADDEMO 05410 ------------------------------ 05420 NEXTDEMO 05430 INC DEMOCNT 05440 LDA DEMOCNT 05450 CMP #4 05460 BNE .1 05470 LDA #0 05480 STA DEMOCNT 05490 .1 05500 JMP (RUNAD) 05510 ------------------------------ 05520 JINITAD 05530 JMP (INITAD) 05540 ------------------------------