!!! 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 ------------------------------
}}}