mirror of
				https://github.com/irmen/prog8.git
				synced 2025-10-31 15:16:13 +00:00 
			
		
		
		
	added notes to textio about PETSCII vs Screencode encoding.
This commit is contained in:
		| @@ -1,4 +1,6 @@ | |||||||
| ; Prog8 definitions for the Text I/O and Screen routines for the Commodore-128 | ; Prog8 definitions for the Text I/O and Screen routines for the Commodore-128 | ||||||
|  | ; All routines work with Screencode character encoding, except `print`, `chrout` and `input_chars`, | ||||||
|  | ; these work with PETSCII encoding instead. | ||||||
|  |  | ||||||
| %import syslib | %import syslib | ||||||
| %import conv | %import conv | ||||||
| @@ -238,10 +240,10 @@ _scroll_screen  ; scroll only the screen memory | |||||||
| 	}} | 	}} | ||||||
| } | } | ||||||
|  |  | ||||||
| romsub $FFD2 = chrout(ubyte char @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. | romsub $FFD2 = chrout(ubyte char @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. Note: takes a PETSCII encoded character. | ||||||
|  |  | ||||||
| asmsub  print (str text @ AY) clobbers(A,Y)  { | asmsub  print (str text @ AY) clobbers(A,Y)  { | ||||||
| 	; ---- print null terminated string from A/Y | 	; ---- print null terminated string, in PETSCII encoding, from A/Y | ||||||
| 	; note: the compiler contains an optimization that will replace | 	; note: the compiler contains an optimization that will replace | ||||||
| 	;       a call to this subroutine with a string argument of just one char, | 	;       a call to this subroutine with a string argument of just one char, | ||||||
| 	;       by just one call to cbm.CHROUT of that single char. | 	;       by just one call to cbm.CHROUT of that single char. | ||||||
| @@ -427,7 +429,8 @@ asmsub  print_w  (word value @ AY) clobbers(A,X,Y)  { | |||||||
| } | } | ||||||
|  |  | ||||||
| asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | ||||||
| 	; ---- Input a string (max. 80 chars) from the keyboard. Returns length in Y. (string is terminated with a 0 byte as well) | 	; ---- Input a string (max. 80 chars) from the keyboard, in PETSCII encoding. | ||||||
|  | 	;      Returns length in Y. (string is terminated with a 0 byte as well) | ||||||
| 	;      It assumes the keyboard is selected as I/O channel! | 	;      It assumes the keyboard is selected as I/O channel! | ||||||
|  |  | ||||||
| 	%asm {{ | 	%asm {{ | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| ; Prog8 definitions for the Text I/O and Screen routines for the Commodore-64 | ; Prog8 definitions for the Text I/O and Screen routines for the Commodore-64 | ||||||
|  | ; All routines work with Screencode character encoding, except `print`, `chrout` and `input_chars`, | ||||||
|  | ; these work with PETSCII encoding instead. | ||||||
|  |  | ||||||
| %import syslib | %import syslib | ||||||
| %import conv | %import conv | ||||||
| @@ -237,10 +239,10 @@ _scroll_screen  ; scroll only the screen memory | |||||||
| 	}} | 	}} | ||||||
| } | } | ||||||
|  |  | ||||||
| romsub $FFD2 = chrout(ubyte character @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. | romsub $FFD2 = chrout(ubyte character @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. Note: takes a PETSCII encoded character. | ||||||
|  |  | ||||||
| asmsub  print (str text @ AY) clobbers(A,Y)  { | asmsub  print (str text @ AY) clobbers(A,Y)  { | ||||||
| 	; ---- print null terminated string from A/Y | 	; ---- print null terminated string, in PESCII encoding, from A/Y | ||||||
| 	; note: the compiler contains an optimization that will replace | 	; note: the compiler contains an optimization that will replace | ||||||
| 	;       a call to this subroutine with a string argument of just one char, | 	;       a call to this subroutine with a string argument of just one char, | ||||||
| 	;       by just one call to cbm.CHROUT of that single char. | 	;       by just one call to cbm.CHROUT of that single char. | ||||||
| @@ -426,7 +428,8 @@ asmsub  print_w  (word value @ AY) clobbers(A,X,Y)  { | |||||||
| } | } | ||||||
|  |  | ||||||
| asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | ||||||
| 	; ---- Input a string (max. 80 chars) from the keyboard. Returns length in Y. (string is terminated with a 0 byte as well) | 	; ---- Input a string (max. 80 chars) from the keyboard, in PETSCII encoding. | ||||||
|  | 	;      Returns length in Y. (string is terminated with a 0 byte as well) | ||||||
| 	;      It assumes the keyboard is selected as I/O channel! | 	;      It assumes the keyboard is selected as I/O channel! | ||||||
|  |  | ||||||
| 	%asm {{ | 	%asm {{ | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| ; Prog8 definitions for the Text I/O and Screen routines for the CommanderX16 | ; Prog8 definitions for the Text I/O and Screen routines for the CommanderX16 | ||||||
|  | ; All routines work with Screencode character encoding, except `print`, `chrout` and `input_chars`, | ||||||
|  | ; these work with PETSCII encoding instead. | ||||||
|  |  | ||||||
| %import syslib | %import syslib | ||||||
| %import conv | %import conv | ||||||
| @@ -384,10 +386,10 @@ _nextline | |||||||
| 	}} | 	}} | ||||||
| } | } | ||||||
|  |  | ||||||
| romsub $FFD2 = chrout(ubyte character @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. | romsub $FFD2 = chrout(ubyte character @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. Note: takes a PETSCII encoded character. | ||||||
|  |  | ||||||
| asmsub  print (str text @ AY) clobbers(A,Y)  { | asmsub  print (str text @ AY) clobbers(A,Y)  { | ||||||
| 	; ---- print null terminated string from A/Y | 	; ---- print null terminated string, in PETSCII encoding, from A/Y | ||||||
| 	; note: the compiler contains an optimization that will replace | 	; note: the compiler contains an optimization that will replace | ||||||
| 	;       a call to this subroutine with a string argument of just one char, | 	;       a call to this subroutine with a string argument of just one char, | ||||||
| 	;       by just one call to cbm.CHROUT of that single char. | 	;       by just one call to cbm.CHROUT of that single char. | ||||||
| @@ -572,7 +574,8 @@ asmsub  print_w  (word value @ AY) clobbers(A,X,Y)  { | |||||||
| } | } | ||||||
|  |  | ||||||
| asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | ||||||
| 	; ---- Input a string (max. 80 chars) from the keyboard. Returns length in Y. (string is terminated with a 0 byte as well) | 	; ---- Input a string (max. 80 chars) from the keyboard, in PETSCII encoding. | ||||||
|  | 	;      Returns length in Y. (string is terminated with a 0 byte as well) | ||||||
| 	;      It assumes the keyboard is selected as I/O channel! | 	;      It assumes the keyboard is selected as I/O channel! | ||||||
|  |  | ||||||
| 	%asm {{ | 	%asm {{ | ||||||
|   | |||||||
| @@ -1,4 +1,6 @@ | |||||||
| ; Prog8 definitions for the Text I/O and Screen routines for the Commodore PET | ; Prog8 definitions for the Text I/O and Screen routines for the Commodore PET | ||||||
|  | ; All routines work with Screencode character encoding, except `print`, `chrout` and `input_chars`, | ||||||
|  | ; these work with PETSCII encoding instead. | ||||||
|  |  | ||||||
| %import syslib | %import syslib | ||||||
| %import conv | %import conv | ||||||
| @@ -139,10 +141,10 @@ asmsub  scroll_down  () clobbers(A,X)  { | |||||||
| 	}} | 	}} | ||||||
| } | } | ||||||
|  |  | ||||||
| romsub $FFD2 = chrout(ubyte character @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. | romsub $FFD2 = chrout(ubyte character @ A)    ; for consistency. You can also use cbm.CHROUT directly ofcourse. Note: takes a PETSCII encoded character. | ||||||
|  |  | ||||||
| asmsub  print (str text @ AY) clobbers(A,Y)  { | asmsub  print (str text @ AY) clobbers(A,Y)  { | ||||||
| 	; ---- print null terminated string from A/Y | 	; ---- print null terminated string, in PETSCII encoding, from A/Y | ||||||
| 	; note: the compiler contains an optimization that will replace | 	; note: the compiler contains an optimization that will replace | ||||||
| 	;       a call to this subroutine with a string argument of just one char, | 	;       a call to this subroutine with a string argument of just one char, | ||||||
| 	;       by just one call to cbm.CHROUT of that single char. | 	;       by just one call to cbm.CHROUT of that single char. | ||||||
| @@ -328,7 +330,8 @@ asmsub  print_w  (word value @ AY) clobbers(A,X,Y)  { | |||||||
| } | } | ||||||
|  |  | ||||||
| asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | asmsub  input_chars  (uword buffer @ AY) clobbers(A) -> ubyte @ Y  { | ||||||
| 	; ---- Input a string (max. 80 chars) from the keyboard. Returns length in Y. (string is terminated with a 0 byte as well) | 	; ---- Input a string (max. 80 chars) from the keyboard, in PETSCII encoding. | ||||||
|  | 	;      Returns length in Y. (string is terminated with a 0 byte as well) | ||||||
| 	;      It assumes the keyboard is selected as I/O channel! | 	;      It assumes the keyboard is selected as I/O channel! | ||||||
|  |  | ||||||
| 	%asm {{ | 	%asm {{ | ||||||
|   | |||||||
| @@ -155,6 +155,9 @@ dealing with text-based input and output (to the screen). Such as | |||||||
| - scrolling the text on the screen | - scrolling the text on the screen | ||||||
| - placing individual characters on the screen | - placing individual characters on the screen | ||||||
|  |  | ||||||
|  | All routines work with Screencode character encoding, except `print`, `chrout` and `input_chars`, | ||||||
|  | these work with PETSCII encoding instead. | ||||||
|  |  | ||||||
| Read the `source code <https://github.com/irmen/prog8/tree/master/compiler/res/prog8lib/cx16/textio.p8>`_ | Read the `source code <https://github.com/irmen/prog8/tree/master/compiler/res/prog8lib/cx16/textio.p8>`_ | ||||||
| to see what's in there. (Note: slight variations for different compiler targets) | to see what's in there. (Note: slight variations for different compiler targets) | ||||||
|  |  | ||||||
| @@ -418,6 +421,9 @@ but perhaps the provided ones can be of service too. | |||||||
| ``mul16_last_upper () -> uword`` | ``mul16_last_upper () -> uword`` | ||||||
|     Fetches the upper 16 bits of the previous 16*16 bit multiplication. |     Fetches the upper 16 bits of the previous 16*16 bit multiplication. | ||||||
|     To avoid corrupting the result, it is best performed immediately after the multiplication. |     To avoid corrupting the result, it is best performed immediately after the multiplication. | ||||||
|  |     Note: It is only for the regular 6502 cpu multiplication routine. | ||||||
|  |     It does not work for the verafx multiplication routines on the Commander X16! | ||||||
|  |     These have a different way to obtain the upper 16 bits of the result: just read cx16.r0. | ||||||
|  |  | ||||||
|  |  | ||||||
| cx16logo | cx16logo | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user