Wie war das damals mit der Spieleprogrammierung?

Diskussion zum Thema Programmierung unter DOS (Intel x86)
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Ohne die VGA-Karte kennen zu lernen wird es nichts. Das ist ein Eiertanz.
Ich versuche jetzt zb erstmal den Mode X zu lernen mit den 4 Seiten-Wechsel , das klapp zwar in "C" aber ich möchte es unbedingt in Pascal 6.0 machen und da finde ich den Fehler nicht , warum es nicht funktioniert.
Wenn das hin haut habe ich 4 Grafikseiten für die Grafik die meinen Programmspeicher nicht mehr so belasten.
Weniger Programmspeichernutzung ergibt einen schnelleren Programmablauf.

Ich benutze nur die VGA-Karte 256kb und 90Mhz Computer und 650KB DOS , das ist mein Ziel.
Was darüber ist , das haben schon die anderen Programmierer geschafft mit ihrem Supergerät...und den Superspielen in der Optik und Ton.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von zatzen »

Hier mal eine kleine Untersuchung von ein paar Spielen bzgl. Grafikmodus und Framerate. Das ist auch ein wenig im Sinne der ursprünglichen Frage des Threads.
Vorgehensweise: In DosBox ein Video mitgeschnitten und in Virtualdub die Frames gezählt, die es dauert bis zur nächsten Bewegung, oft ergab sich ein Muster wie 4/4/4/4/3... Frames, daraus habe ich den Mittelwert gebildet und mit der Hauptframerate des Videos gegengerechnet, die dem Vertical Retrace entspricht.


Xenon2 (1989 Bitmap Brothers), 320x200 VGA, PC Speaker: ca. 18 fps @70 Hz VR

Commander Keen I (1990 id Software), 320x200 EGA/VGA, PC Speaker, ca. 24 fps @70 Hz VR

Commander Keen IV (1991 id Software), 320x200 EGA/VGA, AdLib, 35 fps @70 Hz VR

4D Sports-Driving (1990 Mindscape), 320x200 MCGA, AdLib: ca. 20 fps @70 HZ VR

Prehistorik (1991 Titus), 320x200 VGA, AdLib/MT32, ca. 18 fps @70 Hz VR, Bildschirmwechsel-Scroll 70 fps, währenddessen steht alles still

Blues Brothers (1991 Titus), 320x200 VGA(/MCGA?), AdLib, ca. 24 fps @70 Hz VR

Trolls (1992 Flair Software Ltd.),320x200 MCGA, AdLib: ca. 15 fps @70 Hz VR

Indiana Jones IV (1992 LucasArts), 320x200 VGA(/MCGA?), Adlib/MT32, Animationen und Scrolling 10 fps @70 Hz VR

Gods (Dos) (1992 Bitmap Brothers), 320x200 VGA(/MCGA?), AdLib, ca. 15 fps @70 Hz VR

Pinball Dreams (Dos) (1993 Digital Illusions), 320x200 VGA, Soundblaster 4-Kanal Sample-Musik/FX gemixt Stereo mit 10 kHz, keinerlei Puffer-Delay bemerkbar, 70fps @70 Hz VR

Epic Pinball (1993 Epic MegaGames), 320x240 VGA, Soundblaster 4-Kanal Sample-Musik + 2 Kanal FX gemixt Stereo bei 15 kHz, kein Puffer-Delay bemerkbar, 60fps @60 Hz VR

Lost Vikings (1993 Silicon & Synapse), 320x240 VGA, AdLib/Sb: 60 fps @60 Hz VR



Es gibt also tatsächlich ein paar Spiele die MCGA nutzen, aber man sieht deutlich dass wirklich hohe Framerates nur bei VGA Spielen zu finden sind. Je nach Genre (z.B. Indiana Jones) sind hohe Framerates natürlich gar nicht nötig, und so könnte ich mir denken dass zugunsten von Abwärtskompatibilität LucasArts damals noch für MCGA programmiert hat. Ich erinnere mich von Zeiten als ich noch einen 286 hatte, dass LucasArts Adventures beim Scrolling sehr in die Knie gingen, man konnte das Bild sich regelrecht blättern sehen mit weniger als 10 fps.

Meinem letzten Post zum Trotz, wo mich ersteinmal das "Uff, das jetzt auch noch alles??" überwältigt hatte, finde ich jetzt dennoch die nähere Beschäftigung mit den erweiteren VGA-Modi sehr interessant. Mehrere Bildschirmseiten sind ein schöner Luxus der überhaupt erst flüssiges Scrolling erlaubt, selbst wenn man es nur als kleinen "Überblend" Effekt einsetzen will. 320x240 mit quadratischen Pixeln würde endlich die Inkompatibilität der Grafiken mit modernen Anzeigen beseitigen. Kreise statt Eier, egal wo. Mode Q klingt ansich auch ersteinmal sehr interessant, zumindest dann, wenn die 256x256 auf 4:3 "gezogen" würden, dann hätte man 4:3 Pixel, wie sie Röhrenfernseher haben, das wäre dann dahingehend eine gewisse technische Analogie - und dazu eben die einfache Adressierung und volle Ausnutzung mit exakt 65536 Bytes, bzw. bei vier Seiten den ganzen VGA Speicher mit 262144 Bytes. Wobei - Mode Q ist linear und kann daher wohl auch nur 64K nutzen.

Was mich nur weiterhin vor ein Rätsel stellt - wie haben "die" das gemacht, mit dem Sample-Mix-Sound ohne Delay, und überhaupt, wie lässt man einen Soundpuffer im Hintergrund berechnen während die Grafik unabhängig davon mit 70 fps herumschnellt... Das ist hier aber nicht wirklich das Thema, aber was ich aus der obigen Untersuchung schonmal feststellen konnte: Die Sound-Mixraten sind mit 10 und 15 kHz nicht wirklich hoch. Ich könnte bei ZSM mit 11 kHz arbeiten (wer Pentium hat kann ja immer noch 44 nutzen) und dazu darauf achten dass die Rates der Samples nicht zu hoch werden. Aufgrund von Deltacodierung muss ich sie ja seriell verarbeiten, daher wiegen die Samperates der Samples schwerer als die Mixrate.

Was die Spiele selbst angeht habe ich zwei Dinge bei mir bemerkt:
- Beim Flippern ertappe ich mich dabei dass ich tatsächlich spielen will. Ich glaube das liegt daran, dass ein ziemlich realistisches Gefühl aufkommt, so als hätte man einen echten physisch existenten Automaten vor sich stehen und nicht nur ein Computerspiel
- Bei Jump&Runs sagen mir von obigen Beispielen eher diejenigen zu, die langsamer sind und der Fokus weniger auf hundertstel-Sekunden genaue Geschicklichkeit gelegt wird als vielmehr auf überlegtes Handeln - zudem kann man (oder ich) bei langsameren Spielen die grafische Gestaltung besser auf sich wirken lassen.

Für mich persönlich wäre also auch ein langsames Spiel mit 15 fps erstrebenswert, aber Vollbild-Scrolling wird ohne VGA-Tweaking selbt mit 15 fps schwierig. Offensichtlich im MCGA Modus wurde das bei Trolls aber genauso realisiert. Das Spiel lief auf einem 286 sehr langsam, auf einem 486 dann "flüssig" mit seinen 15 fps. Bei diesem Spiel ist das Scrolling recht nervig, da die Spielfigur meist in der Mitte gehalten wird. Gods hat auch nur 15 fps, scrollt aber nur wenn die Spielfigur sich den Bildschirmrändern nähert, und so fällt kaum auf dass das Spiel auf nur 15 fps läuft, auch weil die Spielfigur langsam geht und nicht wild in der Gegend herumfliegt wie bei Trolls. Je nachdem wie man mit dem Scrolling umgeht reichen also auch niedrige Framerates, so dass Animationen und Scrolling verschmelzen.

Fazit also: Ein bescheidenes 15 fps Spiel sogar mit Scrolling wäre mit MCGA möglich, aber im Zusammenhang mit zusätzlicher CPU Belastung durch gemischten Digisound wäre eine Entlastung durch "richtige" VGA-Programmierung sinnvoll.
mov ax, 13h
int 10h

while vorne_frei do vor;
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Es geht alles .....wenn man sich in dem Rahmen der Bedingungen der früheren Jahre erinnert.

Immer schneller immer bunter immer lauter das war die Devise in den Anfängen der MSDOS Rechner.

Ihr jüngeren seit gar nicht mehr gewohnt mit so etwas zu spielen.
Alle deine Daten von Oben sind für uns ältere Spieler wunderbar.

Kommt mal ein bisschen runter ....und lächelt mal wenn es Ruckelt,
wenn das nicht euren Augen entspricht :
Bei diesem Spiel ist das Scrolling recht nervig, da die Spielfigur meist in der Mitte gehalten wird.
Framerate...Framerate...
Zuletzt geändert von funkheld am Di 17. Mär 2020, 20:01, insgesamt 1-mal geändert.
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Mode x VGA mit Turbo Pascal 6.0
Habe es jetzt nach 4 Tagen endlich geschafft den Mode X zu knacken mit der VGA-Karte-256kb.
War nicht einfach. Es gibt viel Müll darüber der geschrieben wurde in englischer Sprache und in
deutscher Sprache gibt es nichts Prickeldes darüber.

Das habe ich mir jetzt funktionsfähig gemacht in TP 6.0 :
- 4 unabhängige Screens 320x200 mit 256 Farben
- 4 Screens können unabhängig beschrieben werden
- 4 Screens können unabhängig gelesen werden
- 4 Screens können in allen Richtungen die Daten wechseln (kopieren)
- es kann auf alle Screens sichtbar gewechselt werden
- 4 Screen können als 1 großen Screen funktionieren (Scrollen)
- alle Screens können einzeln gelöscht

Mit 70 jahren wird man nicht Mühe.
Schade das meine Fragen teilweise nicht gut beantwortet wurden.
Da habe ich gemerkt, das Mode X ist für viele das "Unbekannte Wesen" wie Famile Corona...
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von zatzen »

funkheld hat geschrieben:Ihr jüngeren seit gar nicht mehr gewohnt mit so etwas zu spielen.
Alle deine Daten von Oben sind für uns ältere Spieler wunderbar.
Ich bin mit diesen Spielen aufgewachsen (80er/90er) und spiele seit Ende der 90er so gut wie nicht mehr.
Meine Absicht war auch eher, ausfindig zu machen, ob man selbst im MCGA Modus genießbare Jump&Run-Scroller machen kann. Deshalb der ganze Vergleich der Spiele, die allesamt erfolgreich waren. Wie ich abschliessend schon sagte reichen mir 15 Hz Framerate, allerdings bedingt, und nur für ein Spiel wo dann nicht beim Scrolling per Frame um 12 oder mehr Pixel weiterruckelt wird. Besagtes "Trolls" habe ich damals aber trotzdem gerne gespielt und mir kam auch nicht der Gedanke, es sei zu schlecht programmiert, sondern ich war richtig erstaunt und habe mich gefreut, wie flüssig sich diese 15 fps auf meinem 486er anfühlten.
Ich würde in ein eigenes Spiel nur eben gern noch Mehrkanal-Sample-Musik+FX einbauen, und das ist relativ CPU intensiv, daher werde ich wohl nicht mit MCGA hinkommen. Es sei denn ich mache ein wirklich sehr gemütliches Spiel ohne Scrolling.
mov ax, 13h
int 10h

while vorne_frei do vor;
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Ich verstehe dich.
Viel Spaß.

Gruss
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von zatzen »

Ich denke hier können wir einige Antworten finden: https://www.drdobbs.com/parallel/graphi ... /184404919
Nicht nur speziell zum Thema Grafik sondern auch was optimale Programmierung angeht.
Ist aber englisch, nach Müll sieht es mir allerdings nicht aus.
mov ax, 13h
int 10h

while vorne_frei do vor;
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Danke es läuft jetzt wunderbar in TP 6.0
Habe jetzt 4 Seiten 64kb Mode x. Brauche nur 2 Grafikseiten und die beiden anderen Seiten nutze ich für andere Daten.

Habe dann für das Programm den Grundspeicher-MS-DOS + 128kb von der Grafikkarte.

Gruss
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von DOSferatu »

funkheld hat geschrieben:Danke es läuft jetzt wunderbar in TP 6.0
Habe jetzt 4 Seiten 64kb Mode x. Brauche nur 2 Grafikseiten und die beiden anderen Seiten nutze ich für andere Daten.

Habe dann für das Programm den Grundspeicher-MS-DOS + 128kb von der Grafikkarte.

Gruss
Ja, man sollte nur unbedingt daran denken, daß Zugriffe auf Grafikkartenspeicher in der Regel langsamer sind als auf den restlichen RAM.
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Dafür ist es Retro...und man sollte keine Angst vor der Langsamkeit haben.

Ich stelle solche Rechnungen nicht auf....sonst macht das Retro-Hobby keinen sinn , könnte sonst eine Super-VGA-Karte nutzen...was wahrscheinlich viele hier machen. Da wird aber dieses ganze MS/DOS ala 1985 wieder versaut.

Es ist ein wunderes Experiment für mich , die 640kb noch mit 128kb erweitern ohne EMS oder wie das Zeugs heißt.

Vielleicht werde ich das Mode x auch mal für das QBX entwickeln....das wird ja viel zu langsam . So ist es wenn man QBX spielt.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von zatzen »

Ich liebäugele jetzt auch etwas mit dem 320x200 Mode und vier Seiten. Ich weiss ja nicht wie schnell das Kopieren von Speicher innerhalb der VGA ist. Wenn es blitzschnell sein sollte, vergleichbar mit einem Page-Wechsel, könnte man ja folgendes überlegen: Ich "male" einen Hintergrund auf Seite 3. Dieser soll sich in Folge nicht weiter ändern sondern immer nur restauriert werden. Dann gehe ich so vor, dass ich diesen jeweils zuerst auf Seite 1 kopiere, dann per CPU die Sprites reinschreibe, und gut. Selbiges für den Seitenwechsel, hin und her zwischen 1 und 2. Was ich über Mode-X gelesen habe und dessen Hardware-Fähigkeiten zu transparentem Kopieren mittels Masking erscheint mir doch etwas knapp im Sinne von Speicherplatz. Abzüglich der beiden 320x240 Seiten bleiben 108544 Bytes für Sprites übrig, und das muss man wegen der Masken noch einmal halbieren, also 54272 Bytes. Das reicht vielleicht für ein kleines feines Spielchen, aber man fühlt sich dann schon wieder so "eingesperrt" als wäre man bei den Grafikdaten aufs Datensegment beschränkt. Hat man bei Mode X, also 320x240, nicht auch 3 Seiten? Würde vom Speicher her ja passen.
Andererseits habe ich noch keine Ahnung wie man Scrolling realisiert durch "verschieben" der Seiten. Michael Abrashs Buch ist zwar im Prinzip ein guter Leitfaden, aber der Kern der Erklärungen geht jeweils nur aus den Assembler-Listings hervor, es fehlt also eine richtige "Anleitung" mit detaillierten Erklärungen. Vielleicht ist das Niveau einfach nur zu hoch für einen VGA-Programmier-Einsteiger, und für versiertere Leute ist das Buch gerade richtig. Es scheint aber auch einen gewissen Schwerpunkt auf 3D Programmierung zu legen, für mich wäre weniger davon gut, und dafür mehr Erklärung wie man mit Bitmaps arbeitet.
mov ax, 13h
int 10h

while vorne_frei do vor;
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Hmmm...
Ich bin 70 Jahre und habe mir das mit dem Mode X bzw den Seiten zusammengesucht und dann Stück für Stück aus den Kram dieses in TP 6.0 zusammengebaut. Die Bücher dafür kann man teilweise in den Müll kloppen für uns Anfänger.

Tolle Sache , bin richtig stolz. War nicht einfach , hat aber Spaß gemacht.

Siehe : funkheld » Di 17. Mär 2020, 20:00

Jetzt kommt meine nächste verrückte Idee , dieses in QBX (PDS 7.1) zu verwirklichen.
Da muss ich natürlich einige kleine Sachen von Mode X in ASM setzen.

Aber es wird klappen. Muss mich jetzt erstmal in ASM einlesen. Werde es mit den TASM machen.

Gruss
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Habe jetzt den Mode X in PDS 7 (QBX) reingebracht.

Habe einige Stückchen gefunden und zusammengesetzt.
Mode X funktioniert. Wusste nicht das es mit QBX funktioniert ohne ASM.
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Hat man bei Mode X, also 320x240, nicht auch 3 Seiten?
Bastle doch erstmal etwas mit dem Mode X vom 320x200 zusammen und schau dir das doch mal an.

Du stellst zu viele negative Vermutungen an ohne irgend einen Versuch gemacht zu haben.

Gruss
funkheld
HELP.COM-Benutzer
Beiträge: 27
Registriert: Di 25. Feb 2020, 10:42

Re: Wie war das damals mit der Spieleprogrammierung?

Beitrag von funkheld »

Dieses ist für QBX (PDS 7.1)
Mode X in Basic.

So habe ich es auch in Turbo Pascal umgesetzt.

Drücke erst die Taste "Q"
Dann "A" bzw "S" , dazwischen mit "Q" zurücksetzen.

Mit "Q" werden 3 Screens mit Linien gesetzt.
- "A" 3x Flip in einer For-Schleife
- "Q" zurücksetzen
- "S" 3x kopiert nach Page 0 in eine For-Schleife

Da ich in Turbo Pascal und auch Basic Grafiken (Sprite) in ASM realisieren muss ist der gesamte Ablauf
für die Bewegung mit den Tasten oder Joy in QBX und Turbo Pascal gleich schnell.

Code: Alles auswählen

DECLARE SUB ySCREEN()
declare SUB yPSET (x AS INTEGER, y AS INTEGER, c AS INTEGER)
declare SUB yCLS (c AS INTEGER)
declare FUNCTION yPOINT% (x AS INTEGER, y AS INTEGER)
declare SUB yPAGEWORK (pageNum AS INTEGER)
declare SUB yPAGEFLIP (pageNum AS INTEGER)
declare SUB yPAGECOPY (dstPage AS INTEGER, srcPage AS INTEGER)

CONST scINDEX = &H3C4
CONST scMapMask = 2
CONST scDATA = &H3C5
CONST scSequencerMemoryMode = 4

CONST gcINDEX = &H3CE
CONST gcDATA = &H3CF
CONST gcBitMask = 8
CONST gcReadMapSelect = 4
CONST gcGraphicsMode = 5
CONST gcMiscellaneous = 6

CONST crtcStartAddressHigh = 12
CONST crtcStartAddressLow = 13
CONST crtcUnderlineLocation = 20
CONST crtcModeControl = 23
CONST crtcINDEX2 = &H3D4
CONST crtcDATA2 = &H3D5

DIM SHARED yPageSeg AS INTEGER
dim shared wert as string

yPageSeg = &HA000
call yscreen

do
  wert$=input$(1) 
  
  if wert="q" then
    screen 0
    call yscreen
    
    call ypagework(1)
    for g%=0 to 180
      call ypset(g%,g%,12)
    next g%
    
    call ypagework(2)
    for g%=0 to 300
      call ypset(g%,45,14)
    next g%
    
    call ypagework(3)
    for g%=0 to 300
      call ypset(g%,120,13)
    next  g%
  end if  

  if wert="a" then
    for z%=0 to 30
      call ypageflip(1)  
      call ypageflip(2)  
      call ypageflip(3) 
    next  z%  
  end if
  
  if wert="s" then
    for z1%=0 to 30
      call  yPAGECOPY(0,1)  
      call  yPAGECOPY(0,2)  
      call  yPAGECOPY(0,3)  
    next  z1% 
  end if
loop

SUB yPAGECOPY (dstPage AS INTEGER, srcPage AS INTEGER)
  DIM ofs AS LONG

  OUT scINDEX, scMapMask    
  OUT scDATA, &HF            

  OUT gcINDEX, gcBitMask     
  OUT gcDATA, &H0           
  
  IF (dstPage < srcPage) THEN
    ofs = CLNG(srcPage - dstPage) * 16000
    
    DEF SEG = &HA000 + dstPage * 1000  
    FOR i% = 0 TO 15999
      POKE i%, PEEK(ofs + i%)
    NEXT i%
  ELSE
    ofs = CLNG(dstPage - srcPage) * 16000
      
    DEF SEG = &HA000 + srcPage * 1000 
    FOR i% = 0 TO 15999
      POKE (ofs + i%), PEEK(i%)
    NEXT i%
  END IF

  OUT gcDATA, &HFF           

  DEF SEG
END SUB

SUB yPAGEFLIP (pageNum AS INTEGER)
  DIM adr AS STRING

  adr = LEFT$(MKL$(CLNG(pageNum) * 16000), 2)

  DO: LOOP WHILE (INP(&H3DA) AND 1)

  OUT crtcINDEX2, crtcStartAddressHigh
  OUT crtcDATA2, ASC(RIGHT$(adr, 1))
  OUT crtcINDEX2, crtcStartAddressLow
  OUT crtcDATA2, ASC(LEFT$(adr, 1))

  DO: LOOP UNTIL (INP(&H3DA) AND 8)
END SUB

SUB yPAGEWORK (pageNum AS INTEGER)
  yPageSeg = &HA000 + pageNum * 1000
END SUB

FUNCTION yPOINT% (x AS INTEGER, y AS INTEGER)
  OUT gcINDEX, gcReadMapSelect 
  OUT gcDATA, x AND 3         
  
  DEF SEG = yPageSeg           
    yPOINT% = PEEK(x \ 4 + y * 80)
  DEF SEG
END FUNCTION

SUB yCLS (c AS INTEGER)
  OUT scINDEX, scMapMask    
  OUT scDATA, &HF           
  
  DEF SEG = yPageSeg        
    FOR i% = 0 TO 15999        
      POKE i%, c
    NEXT i%
  DEF SEG
END SUB

SUB yPSET (x AS INTEGER, y AS INTEGER, c AS INTEGER)
  OUT scINDEX, scMapMask     
  OUT scDATA, 2 ^ (x AND 3)  
  
  DEF SEG = yPageSeg         
  POKE (x \ 4 + y * 80), c   
  DEF SEG
END SUB

SUB ySCREEN
  SCREEN 13                                

  ' Disable chain-4 mode
  OUT scINDEX, scSequencerMemoryMode       
  OUT scDATA, &h06                       
  
  ' Turn off odd/even and set write mode 0
  OUT gcINDEX, gcGraphicsMode              
  OUT gcDATA,&h40                         

  ' Disable chain
  OUT gcINDEX, gcMiscellaneous             
  OUT gcDATA, &h05                         

  ' Disable long mode
  OUT crtcINDEX2, crtcUnderlineLocation    
  OUT crtcDATA2, &h00                      

  ' Enable byte mode
  OUT crtcINDEX2, crtcModeControl         
  OUT crtcDATA2, &he3                     
END SUB
Antworten