Difference between revisions of "HiSoft Pascal"

From Enterprise Wiki
Jump to: navigation, search
(Módosítások az 1.1-es verzióhoz képest)
(Módosítások az 1.1-es verzióhoz képest)
 
(2 intermediate revisions by the same user not shown)
Line 21: Line 21:
  
 
== Módosítások az 1.1-es verzióhoz képest ==
 
== Módosítások az 1.1-es verzióhoz képest ==
Egész számok írása
+
 
 +
'''EXOS(n)'''
 +
 
 +
Az EXOS függvény eljárássá alakítva.
 +
Két helyen kellett módosítani a kódot:
 +
;original code (v1.1):                              ;modified code (v1.2):
 +
l4b0a:  db      l4afc                              l4b0a:  db      l4afc
 +
        db      "EXO","S"+128                              db      "EXO","S"+128
 +
        db      9,3,0    ;9=function                      db      8,0,0    ;8=procedure
 +
                          ;3=return parameter
 +
                          ;  type is CHAR 
 +
        dw      l4767                                      dw      l4767
 +
        db      2                                          db      2
 +
 
 +
 
 +
l4767:  db      4                                  l4767:  db      3      ;copy the next 3 bytes
 +
        call    l04d7                                      call    l04d7  ;EXOS address in RTL
 +
        push    af                                          push    af
 +
 
 +
 
 +
----
 +
 
 +
 
 +
'''Egész számok írása'''
  
 
Az 1.1-es verzióban a számok után egy szóközt is kiír a program. Ez törölve lett, hogy a számok írása ugyanolyan legyen, mint a Turbo Pascal-ban.
 
Az 1.1-es verzióban a számok után egy szóközt is kiír a program. Ez törölve lett, hogy a számok írása ugyanolyan legyen, mint a Turbo Pascal-ban.

Latest revision as of 13:14, 8 December 2013

HiSoft Pascal

A HiSoft Pascal elterjedt Pascal fordító volt a 8 bites számítógépeken. Kiadták Spectrum-ra, CPC-re és ENTERPRISE-ra is.

Dokumentációk:

Spectrum verzió [1]

CPC verzió [2]

MTX512 verzió [3]

ENTERPRISE verzió [4]


Módosítások az 1.1-es verzióhoz képest

EXOS(n)

Az EXOS függvény eljárássá alakítva. Két helyen kellett módosítani a kódot:

;original code (v1.1):                              ;modified code (v1.2):
l4b0a:  db      l4afc                               l4b0a:  db      l4afc
        db      "EXO","S"+128                               db      "EXO","S"+128
        db      9,3,0     ;9=function                       db      8,0,0     ;8=procedure
                          ;3=return parameter
                          ;  type is CHAR   
        dw      l4767                                       dw      l4767
        db      2                                           db      2


l4767:  db      4                                   l4767:  db      3      ;copy the next 3 bytes
        call    l04d7                                       call    l04d7  ;EXOS address in RTL
        push    af                                          push    af




Egész számok írása

Az 1.1-es verzióban a számok után egy szóközt is kiír a program. Ez törölve lett, hogy a számok írása ugyanolyan legyen, mint a Turbo Pascal-ban.

Eredeti kód:

l33b7:  db      6
        call    l05e5           ;writes HL to num
        call    l063d           ;WriteSpace

javítva:

l33b7:  db      3
        call    l05e5           ;writes HL to num
        call    l063d           ;WriteSpace




PAGE

A PAGE parancs feladata a képernyőtörlés és a lapdobás (nyomtatón). Ez a parancs egy CHR(12) karaktert ír ki, ez a kódja a lapdobásnak és Spectrum-on a képernyőtörlésnek is. Lefordított állapotban így néz ki a kód:

 LD   A,12
 CALL 0112H ;WriteChar

A módosított verzióban viszont így fordul le:

     LD   A,(14F7H)
     OR   A         ;mi az output? (0=képernyő, 1=printer)
     LD   A,12      ;a lapdobás kódja a nyomtatón
     JR   NZ,kiir   ;ha A<>0, akkor chr(12)-t fog írni
     LD   A,26      ;ha A=0, akkor CHR(26)-ot fog írni
kiir CALL 0112H     ;karakter írása

Így már ENTERPRISE-on is jól működik a PAGE parancs.

A nyomtató- és képernyőkimenet között a CHR(16) (CTRL+P) kóddal tudunk váltani:

 WRITELN('Most a kepernyore ir.');
 WRITELN(CHR(16),'Most viszont a nyomtatora!');
 WRITELN(CHR(16),'Ezt meg mar megint a kepernyore.');