ACTION! - Simple PRINT Runtime


ACTION! - Simple PRINT Runtime

von Erhard » Sa 27. Jul 2013, 15:45
Hi,

ich habe mich mal an einer kleinen Runtime für PRINT versucht.

Sie enthält

PRINT
PRINTE
PRINTB
PRINTBE
PRINTC
PRINTCE

ACTION-Programme, die nur diese externen Befehle verwenden, kommen dann ohne Modul und ohne die große Runtime aus.

Code: Alles auswählen
 
;**************************************
;* EPRINT03.ACT                       *
;*                                    *
;* Simple PRINT runtime, V0.3         *
;*                                    *
;* (c) 2013 Erhard Puetz              *
;* www.atari-central.de               *
;*                                    *
;**************************************


MODULE

BYTE ARRAY EOL=[1 155]

PROC PRINT=*(BYTE ARRAY S)
  [$18      ;CLC
   $85$A0   ;STA $A0   ;Do not print
   $69$01   ;ADC #$01  ;lenght byte
   $8D$344  ;STA $344
   $86$A1   ;STX $A1
   $69$00   ;ADC #$00
   $8E$345  ;STX $345
   $A0$00   ;LDY #0
   $B1$A0   ;LDA ($A0),Y
   $8D$348  ;STA $348
   $8C$349  ;STY $349
   $A9$0B   ;LDA #$0B  ;BPUT via CIO
   $8D$342  ;STA $342
   $98      ;TYA
   $AA      ;TAX
   $20$E456];JSR $E456
RETURN

PROC PRINTE=*(BYTE ARRAY S)
  [$20 PRINT] ;A,X enthalten die schon
              ;die Adresse des Arrays
  PRINT(EOL)
RETURN

PROC PRINTB=*(BYTE N)
  [$A2$00]  ;LDX #$00
PROC PRINTC=*(CARD N)
  [$85$D4   ;STA $D4 Lo-Byte f. IFP
   $86$D5   ;STX $D5 Hi-Byte
   $20$D9AA ;JSR IFP
   $20$D8E6 ;JSR FASC
   $A0$FF   ;LDY #$FF
   $C8      ;INY
   $B1$F3   ;LDA ($F3),Y
   $99$0551 ;STA $0551,Y
   $10$F8   ;BPL -8
   $29$7F   ;AND #$7F
   $99$0551 ;STA $0551,Y
   $C8      ;INY
   $8C$0550 ;STY $550
   $A9$50   ;LDA #$50
   $A2$05   ;LDX #$05
   $20PRINT];JSR PRINT
RETURN


PROC PRINTBE=*(BYTE N)
  [$A2$00]    ;LDA #$00
PROC PRINTCE=*(CARD N)
  [$20PRINTC] ;JSR PRINTC
  PRINT(EOL)
RETURN

;END


Wer möchte kann die ja mal testen, aber ohne Gewähr.

Viele Grüße

Erhard

Re: ACTION! - Simple PRINT Runtime

von Jac » Mo 29. Jul 2013, 03:14
Tipp:

$86$A1 ;STX $A1
$69$00 ;ADC #$00
$8E$345 ;STX $345

=>
TXA
STA $A1
ADC #$00
STA $345
sonst stimmt der Übertrag nicht.

PROC PRINTBE=*(BYTE N)
[$A2$00] ;LDA #$00
Sollte wohl LDX #$00 heißen (HI Byte), Opcode sieht OK aus

ACTION! - Simple PRINT Runtime

von Erhard » So 11. Aug 2013, 21:22
Hi,

bin gerade aus dem Urlaub zurück ...

Jac hat geschrieben:$86$A1 ;STX $A1
$69$00 ;ADC #$00
$8E$345 ;STX $345


wie bin ich dann auf _das_ schmale Brett gekommen ... ????

Ist ja klar, daß ADC nur für den Akku geht.

Ich schau mir das die Tage noch mal an, spätestens auf der Fujiama.

Viele Grüße

Erhard

ACTION! - Simple PRINT Runtime

von Erhard » Mo 12. Aug 2013, 12:19
Hi,

hier eine korrigierte Version:

Code: Alles auswählen
 
;**************************************
;* EPRINT04.ACT                       *
;*                                    *
;* Simple PRINT runtime, V0.4         *
;*                                    *
;* The runtime file will be named     *
;* EPRINT.LIB so that the INCLUDE may *
;* always refer to the same filename  *
;*                                    *
;* (c) 2013 Erhard Puetz              *
;* www.atari-central.de               *
;*                                    *
;**************************************


MODULE

BYTE ARRAY EOL=[1 155]

PROC PRINT=*(BYTE ARRAY S)
  [$18      ;CLC
   $85$A0   ;STA $A0   ;Do not print
   $69$01   ;ADC #$01  ;lenght byte
   $8D$344  ;STA $344
   $86$A1   ;STX $A1
   $8A      ;TXA
   $69$00   ;ADC #$00
   $8D$345  ;STA $345
   $A0$00   ;LDY #0    ;Get&set length
   $B1$A0   ;LDA ($A0),Y
   $8D$348  ;STA $348
   $8C$349  ;STY $349
   $A9$0B   ;LDA #$0B  ;BPUT via CIO
   $8D$342  ;STA $342
   $A2$00   ;LDX #$00  ;CH #0
   $20$E456];JSR CIOV
RETURN

PROC PRINTE=*(BYTE ARRAY S)
  [$20 PRINT] ;A,X enthalten die schon
              ;die Adresse des Arrays
  PRINT(EOL)
RETURN

PROC PRINTB=*(BYTE N)
  [$A2$00]  ;LDX #$00
PROC PRINTC=*(CARD N)
  [$85$D4   ;STA $D4 Lo-Byte f. IFP
   $86$D5   ;STX $D5 Hi-Byte
   $20$D9AA ;JSR IFP
   $20$D8E6 ;JSR FASC
   $A0$FF   ;LDY #$FF
   $C8      ;INY
   $B1$F3   ;LDA ($F3),Y
   $99$0551 ;STA $0551,Y
   $10$F8   ;BPL -8
   $29$7F   ;AND #$7F
   $99$0551 ;STA $0551,Y
   $C8      ;INY
   $8C$0550 ;STY $550
   $A9$50   ;LDA #$50
   $A2$05   ;LDX #$05
   $20PRINT];JSR PRINT
RETURN


PROC PRINTBE=*(BYTE N)
  [$A2$00]    ;LDX #$00
PROC PRINTCE=*(CARD N)
  [$20PRINTC] ;JSR PRINTC
  PRINT(EOL)
RETURN

;END


Viele Grüße

Erhard

Re: ACTION! - Simple PRINT Runtime

von atarineuling » Mi 4. Sep 2013, 12:54
Hallo, dazu hätte ich bitte mal Info.

Muss dieses Modul gleich am Anfang von meinem Programm stehen oder kann ich die Prints vom Actions-Modul verwenden und später dein Modul als Runtime nutzen ?


Danke.

Re: ACTION! - Simple PRINT Runtime

von eda70 » Mi 4. Sep 2013, 14:44
Man kann die Prints aus dem Modul nutzen.
Wenn man nur Print (in GR. 0 - gehen auch andere STufen? ) braucht, kann man diese verkürzte Runtime nehmen, statt einer langen/kompletten

Re: ACTION! - Simple PRINT Runtime

von atarineuling » Mi 4. Sep 2013, 14:56
Hallo, danke.
Wenn ich jetzt dein Modul vor meiner "proc main()" setze und dein Prints benutze und dann compiliere, muss
beim Testen des Programmes dein Modul als Runtime auf Disk sein oder ist es jetzt in dem Code mit eingebunden und die COM läuft komplett alleine ohne Runtime auf Disk und ohne Action-Modul ?

Vielleicht verwechsele ich es ja jetzt mit dem Action-Modul.

Danke.

Code: Alles auswählen
MODULE

BYTE ARRAY EOL=[1 155]

PROC PRINT=*(BYTE ARRAY S)
  [$18      ;CLC
   $85$A0   ;STA $A0   ;Do not print
   $69$01   ;ADC #$01  ;lenght byte
   $8D$344  ;STA $344
   $86$A1   ;STX $A1
   $8A      ;TXA
   $69$00   ;ADC #$00
   $8D$345  ;STA $345
   $A0$00   ;LDY #0    ;Get&set length
   $B1$A0   ;LDA ($A0),Y
   $8D$348  ;STA $348
   $8C$349  ;STY $349
   $A9$0B   ;LDA #$0B  ;BPUT via CIO
   $8D$342  ;STA $342
   $A2$00   ;LDX #$00  ;CH #0
   $20$E456];JSR CIOV
RETURN

PROC PRINTE=*(BYTE ARRAY S)
  [$20 PRINT] ;A,X enthalten die schon
              ;die Adresse des Arrays
  PRINT(EOL)
RETURN

PROC PRINTB=*(BYTE N)
  [$A2$00]  ;LDX #$00
PROC PRINTC=*(CARD N)
  [$85$D4   ;STA $D4 Lo-Byte f. IFP
   $86$D5   ;STX $D5 Hi-Byte
   $20$D9AA ;JSR IFP
   $20$D8E6 ;JSR FASC
   $A0$FF   ;LDY #$FF
   $C8      ;INY
   $B1$F3   ;LDA ($F3),Y
   $99$0551 ;STA $0551,Y
   $10$F8   ;BPL -8
   $29$7F   ;AND #$7F
   $99$0551 ;STA $0551,Y
   $C8      ;INY
   $8C$0550 ;STY $550
   $A9$50   ;LDA #$50
   $A2$05   ;LDX #$05
   $20PRINT];JSR PRINT
RETURN

PROC PRINTBE=*(BYTE N)
  [$A2$00]    ;LDX #$00
PROC PRINTCE=*(CARD N)
  [$20PRINTC] ;JSR PRINTC
  PRINT(EOL)
RETURN

proc main ()
 print("test")
return

Re: ACTION! - Simple PRINT Runtime

von eda70 » Mi 4. Sep 2013, 15:06
Es ist Erhards Mini-Lib. :)
Nein, es muss keine weitere runtime benutzt werden.
Die notwendigen runtime-Teile hast du ja in dein Programm eingefügt.
Wenn du das Programm kompilierst, das Kompilat speicherst, sollte es stand-alone lauffähig sein.

Wenn du die runtime auslagern willst, speicherst du diese Teile in einer eigenen *.ACT-Datei (bspw. RT.ACT)
diese fügst du dann mit INCLUDE "D:RT.ACT" in dein Programm ein.

Re: ACTION! - Simple PRINT Runtime

von atarineuling » Mi 4. Sep 2013, 16:26
Ja danke.

Gruss

ACTION! - Simple PRINT Runtime

von Erhard » Do 5. Sep 2013, 08:10
Hi,

wenn Du die Simple PRINT Runtime auf Disk unter z.B. EPRINT.LIB abspeicherst und dann in Deinem Programm per

INCLUDE "D:EPRINT.LIB"

einbindest und dann Dein Programm kompilierst, dann ist sie natürlich mit im Binärfile drin.

Dann solltest Du noch folgende grundsätzliche Empfehlungen von mir beachten:

- (D)ein ACTION! Programm sollte immer die Speicherstellen $80-$FF löschen
- (D)ein ACTION! Programm sollte im Quellcode mit einem RTS beginnen (MODULE ... BYTE RTS=[$60] ...)
- die INIT-Adresse muß in eine RUN-Adresse umgewandelt werden

Viele Grüße

Erhard