Szerző Téma: DOS Programok  (Megtekintve 21871 alkalommal)

0 Felhasználó és 1 vendég van a témában

szaboatis

  • Newbie
  • *
  • Hozzászólások: 21
  • Karma: +1/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #15 Dátum: 2016. Március 9. - 12:27:39 »
Nem tudom, VT-DOS alatt mennyi memória áll rendelkezésre, de gondolom, valamivel kevesebb, mint 48k. A cc.com kicsivel nagyobb, mint 48k, a Not enough memory VT-DOS hibaüzenet, a program nem fér be a memóriába.

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #16 Dátum: 2016. Március 10. - 08:49:34 »
Én úgy tudom, hogy körülbelül 56 kilobyte szabad terület áll rendelkezésre. Azt én is tapasztaltam, hogy a Small C (cc.com) valami miatt nem "akar" elférni. A memória meghatározásához valahol ott 100h alatt van információ a TPA felső határára. Ajánlom Sebestyén Pál oldalát (http://www.sdinterface.atw.hu/index.htm) a VT_DOS rendszer kommentált visszafejtésével.
A MESSC-nek ott a forráskódja, meg kéne nézni, mert 27178-tól nullával van feltöltve... levágva egy "WinHex"-el a 00-at a com fileból, úgy néz ki, hogy fut...
« Utoljára szerkesztve: 2016. Március 10. - 09:16:53 írta VaszicsApoca »

szaboatis

  • Newbie
  • *
  • Hozzászólások: 21
  • Karma: +1/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #17 Dátum: 2016. Március 10. - 09:50:06 »
Valóban, köszönöm a tippet, ezt nem néztem. A VT-DOS Operációs Rendszer.pdf -ben néztem egyébként, hogy hol lehet a használható memória teteje, de nem találátam. Belenéztem a MESSCC forrásába, az üres rész úgy látom előre lefoglalt különböző táblázatoknak. Csak két tömb, ami hirtelen találtam 8330 byte. Megpróbálom CP/M emulátor alatt újrafordítani kisebb tömbökkel, hátha befér a TVC memóriájába.

CP/M emulátorban újrafordítottam, a generált assembly listából látszik, hogy kb 18-19 kbyte üres részt fordít bele (MAKE_CC.ZSM részlet):
glbsymtab:   DEFS 7650
locsymtab:   DEFS 680
glbptr:   DEFS 2
locptr:   DEFS 2
wq:   DEFS 240
wqptr:   DEFS 2
litq:   DEFS 9216
litptr:   DEFS 2
line:   DEFS 256

Megpróbálom kisebb táblázatokkal, hogy beférjen a TVC-be :)
« Utoljára szerkesztve: 2016. Március 10. - 10:14:56 írta szaboatis »

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #18 Dátum: 2016. Március 10. - 11:51:53 »
Amit használok CP/M emulátort abban vígan fut (csatolom). Ezt szoktam használni mindenre és csak ha "jó" akkor teszem floppy image-re és futtatom a WinTVC-ben. Sokkal gyorsabb és tulajdon képen Windosból szerkesztek stb.

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #19 Dátum: 2016. Március 10. - 12:16:00 »
CP/M alatt ezt az SBASIC-s promramot találtam, megmutatja a rendszer jellemzőket...
« Utoljára szerkesztve: 2016. Március 10. - 12:32:24 írta VaszicsApoca »

szaboatis

  • Newbie
  • *
  • Hozzászólások: 21
  • Karma: +1/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #20 Dátum: 2016. Március 10. - 12:36:47 »
Köszönöm, lementem a gyűjteményembe. Közben már újrafordítottam CP/M emu alatt, kicsit módosítva a MESCC-t.
c_main.h STRBUF_SIZ=9216 -> STRBUF_SIZ=8704 (36 db 256 byte-os sorpufferből lett 34 soros)
c_main.c GLB_NUM=450 -> GLB_NUM=400
c_main.c GLBTAB_SIZ=7650 -> GLBTAB_SIZ=6800 (450db 17 byte-os bejegyzés helyett 400 db-os)

Ezzel kicsit csökkent a sorfeldolgozó puffer mérete és a globális változók tárolására szánt hely, cserébe fut már a WinTVC-ben.
A cc.com mérete 48512 byte lett, már sikeresen lefordítottam vele egy "Hello world!" programot.

Igazad van, érdemesebb CP/M emulátorban fordítani. Az első kis próbámat is elég sokáig tartott lefordítani WinTVC-ben.
Csatoltam a módosított forrásfájlokat és az új cc.com-ot.

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #21 Dátum: 2016. Március 10. - 12:47:09 »
A két rendeszer közötti különbség, a zöld a VT_DOS, a ciánszínű a UPM (CP/M) ez nagyobb szabad területű...

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #22 Dátum: 2016. Március 10. - 14:06:30 »
Működik nagyobb file-al is, blocks.c - 15963, blocks.zsm - 64640, blocks.prn 135936, blocks.hex 24704 és a blocks.com 10240 csak a nagy prn file miatt vigyázni kell legyen elég hely a lemezen... egyébként köszi! 

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #23 Dátum: 2016. Március 11. - 17:07:59 »
A Blocks játékban néhány helyen (képernyő szekvenciák és a 80/64 miatt) kellett csak módosítani és lehet vele játszani. Értelemszerűen nyíl-botkormány, S-select, K- kill, X -exit, ha valakit érdekel...  (csatolva a forráskód is, C-ben)
« Utoljára szerkesztve: 2016. Március 11. - 17:23:59 írta VaszicsApoca »

szaboatis

  • Newbie
  • *
  • Hozzászólások: 21
  • Karma: +1/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #24 Dátum: 2016. Március 19. - 17:11:55 »
Játszottam pár kört a játékkal :-). Ötletes programokat írtak anno karakteres üzemmódra. Gratulálok a TVC-re portoláshoz! Tovább próbálgattam a MESCC-t, szimpatikus, jól használhatónak tűnik. Elkezdtem benne TVC-re grafikát programozni. Persze a fordítást célszerű CP/M emulátorban vagy a WinTVC "turbó" üzemmódjában végezni. Jól működik az a CP/M emu amit megosztottál. Nagy előnye, hogy közvetlenül a fájlrendszerből dolgozik nem disc image fájlból, így a lefordított fájlok WinTVC image-be juttatása egy kicsit egyszerűbb. Találtam egy jó Z80 emulátort, ami CP/M-et futtat és szintén tud a fájlrendszerből dolgozni: http://www.mathematik.uni-ulm.de/users/ag/yaze-ag/
Ráadásul Linux/Unix alapú rendszerekhez készült, én meg többnyire Linux-ot használok. LinuxMint alatt sikerült lefordítanom, ismerkedem vele. Nem tudom, van-e más rajtam kívül itt a fórumon, aki Linux alatt futtat TVC emulátort. Nyitni szeretnék majd egy új témát a Linuxos tapasztalataimról.

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #25 Dátum: 2016. Március 21. - 14:22:04 »
Korábban feltettem az "assembly_C_Dosban.zip" csomagot ebben volt a MESCC is, most a másikra gondolok a ZCN könyvtárban levőkre. A graph.z -ben ott vannak a rutinok gépi kódban annál a pset-nél egyszerűbbet nem találtam és csak a TVC sajátosságait kellett megadni (511 vagy 512, 239 vagy 240, 8000h képernyő kezdete, jeleztem is a forráskódnál). A másik CPM_emu_Win.zip csomagban benne van a teljes forrás kód is, Linux alatt nem tudom mennyire használható. Nekem sikerült összeszedni és TVC-DOS-ra alkalmazni most már gyors körrajzolót, vonalhúzót assemblyben, Turbo Pascalban és MESCC C-ben is, de a gépi kódot sikerült beilleszteni SBASIC-be. Most egy Mini Turtle grafikán "dolgozom" TVC-DOS parancsban, vagy bath file-ben. Nem tudom lehet-e TVC-DOS bath file-ben címkézni (goto), if-then-else-ni, valami ciklust szervezni, mint az MS-DOS bath-nél.

szaboatis

  • Newbie
  • *
  • Hozzászólások: 21
  • Karma: +1/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #26 Dátum: 2016. Március 21. - 21:50:48 »
Tartok tőle, hogy a VT-DOS-ban ez nem megy. Sem if-then, sem goto, sem for ciklus nem szerepel a "VT-DOS operációs rendszer" c. könyvben. Keresgéltem, úgy látom, a CP/M sem tud ilyet. Ilyen szempontból az MS-DOS már fejlettebb volt. Miért így szeretnéd megoldani?

A ZCN-t még régebben letöltöttem, fel is fogom használni forrásnak. A célom több kisebb modul:
Egy az alapvető grafikus funkcióknak (video page ki/be lapozás; üzemmódváltás 2,4,16 szín; paletta-,  tinta- és keretszín kezelés, képrnyőtörlés stb)
Erre épülne rá egy karakteres megjelenítő mód, természetesen mindhárom üzemmódban (karakterdefiniálás, szövegkiírás olyasmi, mint a BASIC-ben a SET CHARACTER és PRINT AT)
Ráépülne még a grafikus rajzoló mód (PLOT és társai, mindhárom grafikus módban)
Illetve ezektől függetlenül szeretnék még valami mini játék-motor félét összehozni.

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #27 Dátum: 2016. Március 22. - 09:36:45 »
Itt küldök egy mini megvalósítást, van ami 100%-s van amit időnként nem értek, hogy miért nem műxik, de  Én csak mérnők-közgazdász vagyok és amatőr programozgató. Viszont sikerült megoldani DOS parancsból a paraméterek beolvasását és átalakítását. Kettő Szakirodalmat használtam - Programmers CPM Handbook by Andy Johnson-Laird.pdf és Z80 Assembly Language Subroutines (1983)(Lance A Leventhal)(Osborne).pdf. A változók a 07FF0H-tól helyeztem le, valami miatt, ha a elejére tettem nem akarta "munkát". A hibákat szerintem azonnal ki fogod szúrni, vagy egyszerűbben lehet egyes dolgokat megoldani. Kíváncsi vagyok a véleményedre és javaslatodra. Igazából turbo Pascalban szeretném -Szekfű András - CSMLOGO-ját átírni, amit egyszer már TVC-BASIC-re még 1989 körül adaptáltam, kisebb-nagyobb sikerrel... Elvileg a vonalhúzó részek a "Bresenham's line algorithm"-t használják, a legtöbb hasznos eljárást, ötletet a "www.cirsovius.de/" oldalon találtam...
Használat DOS promptban:

Koordináta rendszer: bal felső sarok a 0,0 és jobb alsó sarok a 512,240

toll letétel  - pendown
     felvétel - penup

plot oszlop, sor, 0 - rajzol
                          1 - törli
                          2 - complement
                          3 - xor

line oszlop1, sor1, oszlop2, sor2, 0 - rajzol
                                                     1 - törli
                                                     2 - complement
                                                     3 - xor

Draw oszlop, sor, 0 - rajzol ( az előző letett pontól vonalat húz, vagy töröl)
                          1 - törli
                          2 - complement
                          3 - xor

RAD szög (0-360, vagy több, pl. RAD 125 )

Right                 Jobbra 90 fok
Left                   Balra    90 fok a meglévő fokhoz hozzáadva

Forward hossz pl. Forward 100 - az előző ponttól 100 egység, az adott (RAD, vagy left, right) szögben

Circle oszlop, sor, rádiusz, mode = 0, 1, 2, 3
« Utoljára szerkesztve: 2016. Március 22. - 11:56:00 írta VaszicsApoca »

szaboatis

  • Newbie
  • *
  • Hozzászólások: 21
  • Karma: +1/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #28 Dátum: 2016. Március 23. - 12:31:14 »
A left és right parancs így nem szerencsés, mert a két DW-t a fordító beteszi a kód elejére. Ez addig nem gond, amíg ott 00 van. Ezt NOP (No OPeration) -ként végrehajtja a processzor, azaz nem csinál semmit. Viszont ha a DW-kbe más érték kerül, a program ámokfutásba kezd. A többi rész sem teljesen jó a RADIAN változóba készer is ír, de a programból kilépve ez úgyis elveszik. A left.asm ennyi is elég lenne:

ld    BC,(07FF5h)
ld    HL,90
add HL,BC
ld    (07FF5h),HL


A többibe is belenéztem, így hirtelen nem láttam, hibát, de azok hosszabb kódok. Melyik nem működik? Milyen bemeneti adatokkal?

Nem tudom, a régi Turbo Pascal enged-e inline assembler-t, úgy rémlik, csak gépi kódot lehet beszúrni. Talán külön lefordítani az assembly részeket és linkerrel összefűzni.

Én főleg a ROM visszafejtést használom forrásnak, azt azért elég jól megírták és kifejezetten TVC-re. (A tvc.hu -ról a tvcrom.pdf és Gepi kodu programozas kezdoknek.pdf) Az assembly részeket a MESCC #asm direktrívájába teszem. A végcél az, hogy C -ből lehessen hívni ezeket a funkciókat.

Egyébként én is csak "műkedvelő" vagyok. :-) Rendszergazdaként az időm nagy részében nem kódolok.
« Utoljára szerkesztve: 2016. Március 23. - 12:42:52 írta szaboatis »

VaszicsApoca

  • Full Member
  • ***
  • Hozzászólások: 125
  • Karma: +5/-0
    • Profil megtekintése
Re:DOS Programok
« Válasz #29 Dátum: 2016. Március 23. - 13:15:24 »
Mindegyik Turbo Pascal verzió (1.0-3.0A-ig) tudja az inline() gépi kódot, de csak hexadecimálisan, nem úgy mint a MESSC. Például a plot Turbo Pascal inline-procedurája:

Procedure Plot(Col,Row,Farbe:Integer);{farbe= 0 set, farbe=1 reset}
Begin INLINE (
$ED/$5B/Col/$ED/$4B/Row/$3A/Farbe/$CD/*+$0032/$C9/$80
/$40/$20/$10/$08/$04/$02/$01/$D5/$7B/$E6/$07/$16/$00/$5F/$21/*+$FFF0/$19
/$7E/$61/$6A/$CB/$1C/$CB/$1D/$CB/$1C/$CB/$1D/$4F/$D1/$7B/$E6/$F8/$CB/$1A
/$1F/$1F/$1F/$B5/$6F/$3E/$80/$B4/$67/$C9/$FE/$00/$C2/*+$001E/$21/$00/$02
/$A7/$ED/$52/$D8/$79/$FE/$F0/$D0/$F3/$3E/$90/$D3/$02/$CD/*+$FFC3/$7E/$B1
/$77/$3E/$B0/$D3/$02/$FB/$C9/$21/$00/$02/$A7/$ED/$52/$D8/$79/$FE/$F0/$D0
/$F3/$3E/$90/$D3/$02/$CD/*+$FFA7/$7E/$3E/$00/$77/$3E/$B0/$D3/$02/$FB/$C9);
End;
Köszi az észrevételt, ha lesz még, várom és kipróbálom, azt hiszem maximálni is kell ha x nagyobb 360 akkor x=x-360.