Az ASMON ROM-ot akkor (feltéve, hogy nem sikerül azt is kijavítani
)
Kijavítva
![:-)](/Smileys/phpbb/ds_icon_smile.gif)
A hibát Puskás Zsolt (õt ismeri valaki?) követte el, amikor a Gyányi Sanyi gyorstesztjét beépítette az eredeti ASMON ROM üres területére. Ebben a nehézség az, hogy az EXOS-nál kétféle ROM kezdet lehet, ami nem kompatibilis egymással:
- TEST_ROM az elsõ 8 bájton, rögtön a szöveg után indul a program
- EXOS_ROM az elsõ 8 bájton, utána 16 bites cím a perifériának, majd csak ez után indul a program.
Nem gondolták az Intelligent Software-nál, hogy kellhet majd mindkét funkció is egyazon ROM-ban
![:-(](/Smileys/phpbb/ds_icon_sad.gif)
(De ha megnézitek a cartridge-os gyorsteszt verziómat, látható, hogy némi trükkel megoldható
![Smiley :)](/Smileys/phpbb/smiley.gif)
)
Ráadásul az ASMON INC/DEC-cel vált szegmensszámot, nem XOR-al, így nem cserélhetõek fel a szegmensei. Viszont hely a második szegmensben volt...
Így azt a megoldást választotta, hogy a ROM elejei lettek megcserélve, majd az ott belépõ program átlapozza magát a másik szegmensre, a TEST ROM programmal nincs is gond, mert az DI alatt fut...
Az EXOS ROM belépési program így néz ki az átvariálás után:
C00A DB B2 IN A, (B2)
C00C 08 EX AF, AF'
C00D DB B3 IN A, (B3)
C00F D3 B2 OUT (B2), A
C011 C3 14 80 JP 8014
8014 3D DEC A
8015 D3 B3 OUT (B3), A
8017 C3 F0 FF JP FFF0
FFF0 08 EX AF, AF'
FFF1 D3 B2 OUT (B2), A
FFF3 79 LD A, C
FFF4 C3 0B C0 JP C00B
C00B C3 CD DB JP DBCD
Itt már látható is a hiba: ideiglenesen kilapozza a rendszerszegmenst a második lapról, pedig ilyenkor oda mutat a veremmutató, így ha ezen pár pillanatban fut be a megszakítás, kész a fagyás!
Vagy csak az ASMON indításakor okozhat fagyást, és nem bármilyen programból végzett EXOS 0 hívásnál ?
Bármikor okozhat fagyást, amikor körbe vannak hívva az EXOS ROM-ok. Így belegondolva emlékszem pár HELP lista fagyásra is...
A hibát okozó lapozás amúgy teljesen felesleges, nem kell elugrani azért a 3-as lapról, hogy kicseréljük az ott futó program alatt a szegmenst.
Ime a javítás:
C00A C3 EB FF JP FFEB
FFEB DB B3 IN A, (B3)
FFED 3D DEC A
FFEE D3 B3 OUT (B3), A
FFF0 79 LD A, C
FFF1 C3 CD DB JP DBCD
Kicsit egyszerûsítettem is a kódon: JP-re való ugrás helyett akár ugorhatunk egybõl a célba is
![:-)](/Smileys/phpbb/ds_icon_smile.gif)
mindezzel spóroltunk pár mikroszekundum végrehajtási idõt
![ds_icon_cheesygrin :ds_icon_cheesygrin:](/Smileys/phpbb/ds_icon_cheesygrin.gif)
Úgy látszik, valójában a TPT.ROM miatt lesz 0Ch a várakozási mód - lehet, hogy ennek sem kellene alapértelmezés szerint a konfigurációkban lenni (már csak azért sem, mert a turbós és tömörített magnós mentést teszi alapértelmezetté, ami nem kompatibilis az EXOS eredeti TAPE: betöltõjével) ?
TPT forráskódunk van, így nincs akadálya más alapértelmezésû változat fordításának.