Megvan a hiba, a hiba rutin kezdetét a 0100h címre tettem, úgy láttam, a program többet nem használja a 0100h-s címet, pedig de, ezért lett a győztes, és a vesztes jutalma is a villogó Enterprise felirat, amivel lehet jobban is járunk, mint az eredetivel, ami szimplán visszadob a kezdőképernyőre, csak a felirat más a két esetben.
Itt egyébként lehetne némi helyet megtakarítani (úgy látom, ez a rutin eredetileg a Zozosoft-féle Spectrum átirat betöltőből lett másolva
):
hibax phase hibacop
ld sp,0100h
ld a,255
out (0b2h),a
;ld hl,hiba
;ld (0bff8h),hl
; ld hl,(0bff4h)
; ld a, l
; ld b,4
;hiba1 srl h
; rra
; djnz hiba1
; out (82h),a
; ld a,h
; or 0cch
; out (83h),a
ld c, 40h
exos 0
ld a, 01h
out (0b3h), a
ld a, 06h
jp 0c00dh
dephase
hibalng equ $-hibax
A módosítások:
- rövidebb kód az EXOS LPT visszaállításához, amely azonban valójában nem kell, mert az EXOS már a melegindítási címre ugrás előtt visszaállította az ilyenkor automatikusan történő C=10h EXOS 0 közben, ezért megjegyzésekre írtam át
- nem kell visszamásolni a 0030h-005Ah területre semmit, mert ezt az EXOS már megtette a melegindítási rutin előtt (kivétel, ha ezt a program közvetlenül is hívja olyan esetben, amikor az EXOS 0. lap területe el van rontva, de itt úgy látom, nem fordul elő ilyen)
- egyszerűbb és rövidebb memória felszabadítás C=40h EXOS 0 hívással
- rövidebb kód a 01:C00Dh címre ugráshoz - az eredetileg használt bonyolult megoldás csak akkor kell, ha az ugrás a 3. lapról történne, de melegindítási rutin eleve csak a 0. lapon lehet, tehát ez elő sem fordulhat; ezzel egyben megtakarítható az EXOS 2.0 felismerése is nem dokumentált EXOS változó olvasásával és az ugrási cím módosítása B217h-ról B21Ch-ra
Még megspórolható lenne a decompressData rutin beépítése is RST 28H használatával, bár lehet, hogy annak van valami különleges hátránya, amiről nem tudok, és ezért nem használja senki