Welcome, Guest. Please login or register.


Author Topic: BASIC (Read 154686 times)

Offline szipucsu

  • EP addict
  • *
  • Posts: 7336
  • Country: hu
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #30 on: 2006.October.16. 18:05:28 »
Igazad van, Zozo, az EP memóriakezelésérõl halovány fogalmam sincs. :D A saját memóriám is megtréfál idõnként...

Archivációs tevékenységem folytatásához összedobtam egy progit basicben, ami elvileg orrvérzésig másol kazettáról floppyra, ezt most mellékelem.
Én nagyon szeretem úgy használni az EP-t, hogy még a tévét sem kapcsolom be hozzá, ezen igényemet igyexik kiszolgálni fergeteges alkotásom. Csalafinta módon kiolvassa a status sorból a file címét, megnézi, van-e már ilyen a floppyn, ha nincs, akkor lemásolja, meg ilyesmi.

A sebesség növelése érdekében bevetettem az OUT 191,12 és a POKE 56,201 nevû fegyvereket. Az utóbbi tiltja a megszakításokat, ezért van az egész progi egy WHEN blokkban, hogy ha balhé van, akkor elõbb állítsa vissza a megszakikat, utána balhézzon a gép, hogy ne hiába nyomogassuk a billentyûket ebben az esetben.
Valami plusz 5letetek nincs, amivel még gyorsabbá lehet tenni a progit? A PAUSÉknél kicsit sokat vár.

Tudom, még lehetne továbbfejleszteni, hogy pl. akkor is ellenõrizze, nincs-e ilyen fájl, ha újat adunk meg (ha mégis felül akarjuk írni, akkor sima ENTER-t kell nyomni), ill ha olyan file jön a magnóról, amiben pl. több . karakter is van, akkor is másolja le valami más néven a hibaüzi helyett. Talán majd egyszer azt is megcsinálom...

Szóval a sebességet lehetne még növelni? A Zzzip sajnos nem eszi meg ezt a progit...
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #31 on: 2006.October.16. 18:53:18 »
Quote from: "szipucsu"

Valami plusz 5letetek nincs, amivel még gyorsabbá lehet tenni a progit? A PAUSÉknél kicsit sokat vár.

Igen mert a COPY karakterenként olvas, ír, vagyis egy bájt átviteléhez roppant sok kód fut le...
Mindenképpen blokk mûveleteket érdemes használni. A magnó blokk mérete miatt mondjuk 4096 bájtos adagokban célszerû kezelni a cuccot, vagyis 4096 bájtot beolvasni az 1-es csatornáról, és aztán 4096-ot kiírni a 2-esre. Természetesen ha nem sikerült 4096 bájtot beolvasni, mert már nincs annyi a fájlban, akkor ki kell számolni mennyit sikerült, és annyit kell kiirni, majd kilépni a másolási cikklusból.
Sajnos erre nincs semmilyen Basic utasítás :-(
Így ezt egy pici gépi kódú betétben kell megirni (ALLOCATE :-) , CODE, CALL USR...).
Lõjem le a poént, vagy menni fog egyedül is? :-)

Offline szipucsu

  • EP addict
  • *
  • Posts: 7336
  • Country: hu
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #32 on: 2006.October.16. 19:35:27 »
Quote from: "Zozosoft"

Lõjem le a poént, vagy menni fog egyedül is? :-)


Hát, a gépi kódú dolgokról annyi a fogalmam, mint a gép memóriakezelésérõl. Szóval ha nem túl nagy gond, megírnád, mit mire cseréljek ki a basic programomban? (Lehetõleg úgy, hogy az említett tervezett módosításokat is meg tudjam még utána csinálni, vagyis a fájlnevekkel idétlenkedést. Vagy ehhez újra kéne írni szinte az egész progit?)
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #33 on: 2006.October.16. 20:03:34 »
Hát elméletileg valami ilyesmirõl van szó...
Code: [Select]

                IN A,(0B1H)
                PUSH AF
                EXOS 24
                LD L,A
                LD A,C
                OUT (0B1H),A
                JR NZ,KILEP
MASOL           LD A,1
                LD DE,4000H
                LD BC,4096
                EXOS 6
                LD DE,4000H
                JR NZ,KILEP
                LD A,2
                LD BC,4096
                EXOS 8
                JR MASOL
                LD L,A
                PUSH HL
                LD HL,4096
                OR A
                SBC HL,BC
                PUSH HL
                POP BC
                POP HL
                LD A,C
                OR B
                JR Z,KILEP
                LD A,2
                EXOS 8
KILEP           LD A,1
                EXOS 3
                LD A,2
                EXOS 3
                IN A,(0B1H)
                LD C,A
                EXOS 25
                POP AF
                OUT (0B1H),A
                LD H,0
                RET
                END


Az Asmon (legalábbis az 1.5-ös) nagyon rendes hozzánk, ha ezt lefordítjuk 4-es fejléccel, akkor ezt kapjuk:
Code: [Select]
   1 ALLOCATE 80
    2 CODE M=HEX$("DB,B1,F5,F7,18,6F,79,D3")
    3 CODE =HEX$("B1,20,2B,3E,01,11,00,40")
    4 CODE =HEX$("01,00,10,F7,06,11,00,40")
    5 CODE =HEX$("20,1C,3E,02,01,00,10,F7")
    6 CODE =HEX$("08,18,E8,6F,E5,21,00,10")
    7 CODE =HEX$("B7,ED,42,E5,C1,E1,79,B0")
    8 CODE =HEX$("28,04,3E,02,F7,08,3E,01")
    9 CODE =HEX$("F7,03,3E,02,F7,03,DB,B1")
   10 CODE =HEX$("4F,F7,19,F1,D3,B1,26,00")
   11 CODE =HEX$("C9,00,00,00,00,00,00,00")


Így ezt már csak össze kell MERGE-zni az eredetivel, meg lecserélni a COPY-t a saját programunkra.
És aztán ki kéne próbálni, hogy azt csinálja-e amit gondolunk :-)

Offline Povi

  • EP addict
  • *
  • Posts: 1697
  • Country: hu
    • View Profile
    • http://povi.fw.hu
Re: BASIC
« Reply #34 on: 2006.October.16. 20:40:59 »
Quote from: "Zozosoft"
Az Asmon (legalábbis az 1.5-ös) nagyon rendes hozzánk, ha ezt lefordítjuk 4-es fejléccel, akkor ezt kapjuk:

Nem is tudtam, hogy az ASMON ilyet is tud!!! :shock:
Nagyon okos!
*** Speicherplatz zu klein

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #35 on: 2006.October.16. 20:45:49 »
Quote from: "Povi"
Nem is tudtam, hogy az ASMON ilyet is tud!!! :shock:
Nagyon okos!

Sejtettem, hogy neked tetszeni fog :-)

Offline szipucsu

  • EP addict
  • *
  • Posts: 7336
  • Country: hu
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #36 on: 2006.October.17. 11:56:57 »
Quote from: Zozosoft
Így ezt már csak össze kell MERGE-zni az eredetivel, meg lecserélni a COPY-t a saját programunkra.
És aztán ki kéne próbálni, hogy azt csinálja-e amit gondolunk :-)


 :smt041  :smt041  :smt041  :smt041  :smt041  :smt041  :smt041  :smt041  :smt041  :smt041

 :mrgreen:  :smt006  :smt026  :smt023  :smt040  :smt039  :smt026
« Last Edit: 2007.April.15. 22:59:36 by szipucsu »
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #37 on: 2006.October.17. 13:35:50 »
Ez a nagy újjongás azt jelenti, hogy mûködik? :-)

Offline szipucsu

  • EP addict
  • *
  • Posts: 7336
  • Country: hu
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #38 on: 2006.October.17. 21:03:45 »
Mûködik bizony!

Csak azt ne mondd, hogy te is a munkahelyeden dobtad össze a progit szabadidõdben:)
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #39 on: 2006.October.17. 21:23:03 »
Quote from: "szipucsu"
Csak azt ne mondd, hogy te is a munkahelyeden dobtad össze a progit szabadidõdben:)

Nem, ezt itthon, miközben vártam, hogy elkészüljön a vacsora :-)

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #40 on: 2007.January.06. 23:09:22 »
Az gondolom közismert, hogy eredetileg az IS-BASIC-ben hibás az EXT utasítás:

A példa esetén egy 25 GOTO 30 utasítással ki lehet kerülni a hibát.

Anno sikerült kijavítanom a hibát a ROM-ban, el is küldtem a leírást az Enterpressbe, de valamiért nem került leközlésre :-( (legalábbis nem találom egyikbe se...)
De most megtaláltam az egyik lemezemen a levelet :-)

Quote
     Tisztelt Szerkesztõség
   
    Biztos önök is sokat bosszankodtak azon, hogy a Basic EXT utasítás után
   mindig GOTO kell ! Itt a megoldás :
    Ha az ASMON-ban megcsináltuk a leírtakat, akkor már csak be kell égetni
   a módosított BASIC-et, vagy az EPDOS ROMLOAD paranccsal betölteni.
   
           A módosításhoz sok sikert kiván:
   
                                 ZOZOSOFT&APUCI
Code: [Select]
-[O] B1 [ENTER] xx [ENTER] xx:A BASIC szegmens
-[C] 4000 [ENTER] 7FFF [ENTER] 8000 [ENTER]
-[C] BA42 [ENTER] BA7F [ENTER] BA3F [ENTER]
-[C] BA5A [ENTER] BA7B [ENTER] BA57 [ENTER]
-[M] BA76 [ENTER] 0D 0A F7 1A DF D7 16 00 C9 [ESC]
-[M] 8095 [ENTER] 3C [ESC]
-[M] 9850 [ENTER] C3 78 FA [ESC]
-[S] 8000 [ENTER] BFFF [ENTER] BASIC.ROM [ENTER]


   10 PROGRAM "extdemo.bas"
  100 FOR I=1 TO 5
  110   READ NEV$
  120   CALL HIV(NEV$)
  130 NEXT
  140 DEF HIV(A$)
  150   TEXT
  160   PRINT "ext ""help "&A$&""""
  170   EXT "help "&A$
  180   WAIT 2
  190 END DEF
  200 DATA "",wp,basic,exdos,isl1985

Ahogy nézem a javított BASIC.ROM annyira elterjedt, hogy ma már csak azt lehet fel lelni a neten :-) így itt egy eredeti ROM fájl is.

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #41 on: 2007.January.06. 23:41:52 »
Részletesen kifejtve a módosítást:
Az eredeti EXT végrehajtó része így néz ki:
D850  EXOS 1AH
D852  RST 18H
D853  RET

Az EXOS hívás maga az EXOS parancs kiadása, az RST 18H az EXOS hiba ellenõrzése funckció a BASIC ROM-ban.
Kimaradt viszont a BASIC verem kitakarítása! Ez okozza a hibát, ill. ez az amit a GOTO megcsinál...
Ezt egy:
RST 10H
DB 16H,0
kóddal érhetjük el.
Viszont hova írjuk be?
A HELP BASIC-re adandó help szövegbõl szedtem le pár szóközt, és az így keletkezett helyre kerül a módosított kód:

FA78  EXOS 1AH
FA7A  RST 18H
FA7B  RST 10H
FA7C  DB 16H
FA7D  DB 00H
FA7E  RET

D850-re pedig JP FA78H

A korábbi ASMON leírás sorról sorra:
1) BASIC ROM belapozása az 1. lapra
2) BASIC ROM átmásolása a 2. lapra
3) HELP szöveg elsõ sorának lerövidítése 3 bájttal (bevezetõ szóközök)
4) második sor lerövidítése
5) a keletkezett helyre beírásra kerül elöször a szöveget lezáró CR/LF, majd a szükséges új kód
6) HELP szöveg hosszának átírása
7) kódra ugró JP elhelyezése
9) javított ROM fájl kimentése (azért 9 mert a 8 után zárójel kombinációból szmájli lesz 8)

Házifeladat ezek alapján az IS-BASIC 2.0-ban kijavítani az EXT hibát! :-)
« Last Edit: 2007.January.22. 19:34:26 by Zozosoft »

Online Zozosoft

  • EP addict
  • *
  • Posts: 13070
  • Country: hu
    • View Profile
    • http://enterprise.iko.hu/
Re: BASIC
« Reply #42 on: 2007.January.22. 20:01:25 »
Házifeladat ezek alapján az IS-BASIC 2.0-ban kijavítani az EXT hibát! :-)
Úgy látom senki nem csinálta meg a házifeladatot :(
Akkor ime a javított 2.0 ROM.
Az EXT végrehajtó része ez esetben D827-en van, a javított kód a HELP szöveg átrendezése után FA22-re került.

Offline szipucsu

  • EP addict
  • *
  • Posts: 7336
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 2.0.0.3 Firefox 2.0.0.3
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: BASIC
« Reply #43 on: 2007.May.22. 01:51:37 »
Nyilván igen nagy marhaság, de a következõ programmal lehet a fagyáson kívül károkat okozni?

10 RANDOMIZE
20 DO
30   POKE RND(65535)+1,RND(256)
40 LOOP

(Az másik kérdés, hogy ilyen zsibbadtság csak nekem jut eszembe...)
Az elsõ RND után kell az a +1 itt? Van nullás cím?

Egyébként soha nem értettem, mi a különbség a POKE és a SPOKE között. Ráadásul a SPOKE után az elsõ szám majdnem mindig 255 volt, látszólag felesleges. Mi van, ha 255 helyett valami mást írunk ilyen esetben?
Amúgy alighanem szójáték lehet a poke-peek mintájára a spoke-speek, talán csak az Enterprise basic-je ismeri.
Számomra, aki nem értek e gépi kódhoz, érdekesség, hogy az OUT is hasonlóan mûködik, mint a poke, hiszen egy új értéket adhatunk valaminek. Lekérdezni már nem tudom, mivel lehet az OUT-os belepiszkálást, talán a print in(n)-nel.
Arra emlékszem, hogy bizonyos BASIC parancsokat is helyettesíteni lehetett az out-tal (set status off, toggle akármik). A set character meg helyettesíthetõ volt spoke-kal, úgy emlékszem. A kedvencem az out 191,12 volt, ez felgyorsította kicsit a gépet, ezt majdnem minden basic programom elejére betettem. Valamilyen spoke-kal el lehetett érni, hogy az egész képernyõn a status sor scroll-ozzon fentrõl lefelé, meg be lehetett kapcsolni a CAPS-et anélkül, hogy billentyût megnyomtunk volna hozzá.
De lehet, hogy az out-ot keverem a set-tel... Talán a set-es ügyködést lehetett az ASK-kal lekérdezni...
« Last Edit: 2007.May.22. 01:55:13 by szipucsu »
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline Lacika

  • EP addict
  • *
  • Posts: 2886
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 2.0.0.3 Firefox 2.0.0.3
    • View Profile
    • http://www.ep128.hu
Re: BASIC
« Reply #44 on: 2007.May.22. 08:22:00 »
A SPOKE /SPEEK utasítások nagyon jól használhatóak az Ep szegmensekre osztott memóriájában való "turkálásra". (Tekintve, hogy a négy lapon nem biztos, hogy mindig ugyanazok a szegmensek vannak belapozva, a POKE utasítással egyáltalán nem biztos, hogy jó helyre írjuk be a kívánt értéket.)

A két utasításról az Enterpress-ben olvashatunk részltesebben.