Welcome, Guest. Please login or register.


Author Topic: HiSoft Pascal (Read 32475 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 57.0 Firefox 57.0
    • View Profile
Re: HiSoft Pascal
« Reply #390 on: 2018.February.15. 16:34:36 »
Az LDIR-nél arra azért figyelj, hogy mi van akkor, ha átfedésben van a célterület a forrással, az nincs lekezelve :-)

Ez hasznos is lehet tömb feltöltésére, akár ismétlődő sorozattal vagy nem 1 byte méretű típussal. De ha valóban mozgatás a cél, akkor arra egyszerűen készíthető LDDR-es változat is.

Offline Lacika

  • EP addict
  • *
  • Posts: 2923
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #391 on: 2019.August.13. 14:11:55 »
A memória egy adott területéről (hossz-byte-tal az elején) egy szövegfüzért kiírni van valami egyszerűbb módszer ehelyett:

Code: [Select]
PROGRAM HIBA;
VAR TMP,RA: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  TMP:=EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    TMP:=EXOS(28);
    FOR I:=#14AE+1 TO #14AE+ORD(PEEK(#14AE,CHAR)) DO
      WRITE(PEEK(I,CHAR));
    WRITELN('.')
  END
END.

A PEEK hiába rugalmas, típusmegadásnál csak konstans fogad el...

Offline Povi

  • EP addict
  • *
  • Posts: 1857
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 76.0.3809.100 Chrome 76.0.3809.100
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #392 on: 2019.August.13. 18:10:55 »
A memória egy adott területéről (hossz-byte-tal az elején) egy szövegfüzért kiírni van valami egyszerűbb módszer ehelyett:

Code: [Select]
PROGRAM HIBA;
VAR TMP,RA: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  TMP:=EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    TMP:=EXOS(28);
    FOR I:=#14AE+1 TO #14AE+ORD(PEEK(#14AE,CHAR)) DO
      WRITE(PEEK(I,CHAR));
    WRITELN('.')
  END
END.

A PEEK hiába rugalmas, típusmegadásnál csak konstans fogad el...

A 0x0231 címen lévő rutin lefuttat egy EXOS 28-at, és kiírja a hibaüzenetet. Ha az adott hibához nincs string, akkor a "Pascal can't cope!" szöveget ír ki.
Sajnos ezután kilép a programból.

Ahhoz, hogy ne lépjen ki, a 0x023f címen lévő JP 0x010c helyett egy RET kell.

Vagyis

Code: [Select]
POKE(£023F,CHR(£C9));
aztán lehet a

Code: [Select]
USER(£0231);
aztán állítsd vissza a RET utasítást JP-re (0xc3)
« Last Edit: 2019.August.13. 18:14:21 by Povi »
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 2923
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #393 on: 2019.August.14. 14:08:49 »
Jól értem, így kellene működnie:

Code: [Select]
PROGRAM HIBA;
VAR TMP: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  TMP:=EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    POKE(#023F,CHR(#C9));
    USER(#0231);
    POKE(#023F,CHR(#C3));
    RA:=CHR(121);RDE:=#14AE+1;RBC:=ORD(PEEK(#14AE,CHAR));
    TMP:=EXOS(8);
    WRITELN('.')
  END;
  WRITELN('Vege.')
END.

Ez "csatorna nincs nyitva" hibaüzenetre is a fentit adja.
« Last Edit: 2019.August.14. 14:56:13 by Lacika »

Offline Povi

  • EP addict
  • *
  • Posts: 1857
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 76.0.3809.100 Chrome 76.0.3809.100
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #394 on: 2019.August.14. 16:28:22 »
Jól értem, így kellene működnie:

Ez "csatorna nincs nyitva" hibaüzenetre is a fentit adja.

nem lesz jó a megoldásom, mert előbb az A regiszternek át kéne adni a hibaüzenet kódját, mielőtt meghívjuk a 0231-en lévő rutint... :oops:

A te megoldásod majdnem jó.

Code: [Select]
PROGRAM HIBA;
VAR TMP: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    EXOS(28);
    RA:=CHR(121);RDE:=#14AF;RBC:=ORD(PEEK(#14AE,CHAR));
    EXOS(8);
    WRITELN('.')
  END;
  WRITELN('Vege.')
END.
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 2923
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #395 on: 2019.August.14. 17:04:03 »
Valami bugot találhattunk...
A program lefut, de pl a W parancsra lefagy a PASCAL.

Offline Povi

  • EP addict
  • *
  • Posts: 1857
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 76.0.3809.100 Chrome 76.0.3809.100
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #396 on: 2019.August.15. 13:45:00 »
Valami bugot találhattunk...
A program lefut, de pl a W parancsra lefagy a PASCAL.
hááát
az 14AE területre nem szerencsés írni
fölül lett írva egy csomó dolog, amit nem kellett volna :-)

az 15ae területre kéne írni
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 2923
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #397 on: 2019.August.15. 17:23:35 »
az 14AE területre nem szerencsés írni

Ahhh! Nyomdahiba...:oops: Kösz!