Nspire Compatibility
Moderator: benryves
- benryves
- Maxcoderz Staff
- Posts: 3089
- Joined: Thu 16 Dec, 2004 10:06 pm
- Location: Croydon, England
- Contact:
Re: Nspire Compatibility
Does VDU 4 crash as well?
Re: Nspire Compatibility
VDU 4 does not crash.
- benryves
- Maxcoderz Staff
- Posts: 3089
- Joined: Thu 16 Dec, 2004 10:06 pm
- Location: Croydon, England
- Contact:
Re: Nspire Compatibility
Well, I'm stumped, then!
The various text outputting routines are vectored, so when switching MODE or between VDU 4/VDU 5 the routines that are responsible for outputting text are swapped. In theory, if it's part of the sprite-drawing code that's to blame (which is used to draw characters in VDU 5 mode) then it should only crash when text is output, but an infinite loop to suppress output didn't apparently help.
VDU 5 does nothing special that should trigger a crash that VDU 4 doesn't do, as far as I can see (source):
The various text outputting routines are vectored, so when switching MODE or between VDU 4/VDU 5 the routines that are responsible for outputting text are swapped. In theory, if it's part of the sprite-drawing code that's to blame (which is used to draw characters in VDU 5 mode) then it should only crash when text is output, but an infinite loop to suppress output didn't apparently help.
VDU 5 does nothing special that should trigger a crash that VDU 4 doesn't do, as far as I can see (source):
Code: Select all
; ========================================================================================
; VDU 4 DRAW TEXT AT TEXT CURSOR
; ========================================================================================
Vdu4
ld hl,(Text.4.PutMapNoWriteBuffer)
ld (Text.PutMapNoWritebuffer+1),hl
ld hl,(Text.4.PutMap)
ld (Text.PutMap+1),hl
ld hl,Text.Cursor.Up.Routine \ ld (Text.Cursor.Up+1),hl
ld hl,Text.Cursor.Down.Routine \ ld (Text.Cursor.Down+1),hl
ld hl,Text.Cursor.Left.Routine \ ld (Text.Cursor.Left+1),hl
ld hl,Text.Cursor.Right.Routine \ ld (Text.Cursor.Right+1),hl
ld hl,Text.Cursor.PutBlinking.Routine \ ld (Text.Cursor.PutBlinking+1),hl
ld hl,Text.Cursor.MoveToLeft.Routine \ ld (Vdu.Text.Cursor.MoveToLeft+1),hl
xor a
- ld (Text.GraphicalText),a
ret
; ========================================================================================
; VDU 5 DRAW TEXT AT GRAPHICS CURSOR
; ========================================================================================
Vdu5
ld hl,Text.Graphical.PutMap.Routine
ld (Text.PutMapNoWritebuffer+1),hl
ld (Text.PutMap+1),hl
ld hl,Text.Graphical.Cursor.Up.Routine \ ld (Text.Cursor.Up+1),hl
ld hl,Text.Graphical.Cursor.Down.Routine \ ld (Text.Cursor.Down+1),hl
ld hl,Text.Graphical.Cursor.Left.Routine \ ld (Text.Cursor.Left+1),hl
ld hl,Text.Graphical.Cursor.Right.Routine \ ld (Text.Cursor.Right+1),hl
ld hl,Text.Graphical.Cursor.PutBlinking.Routine \ ld (Text.Cursor.PutBlinking+1),hl
ld hl,Text.Graphical.Cursor.MoveToLeft.Routine \ ld (Vdu.Text.Cursor.MoveToLeft+1),hl
ld a,$FF
jr -
-
- New Member
- Posts: 67
- Joined: Sun 09 Nov, 2008 1:56 pm
Re: Nspire Compatibility
well, vdu4 loads (Text.4.PutMapNoWriteBuffer) in (Text.PutMapNoWritebuffer+1), but vdu5 loads the adress of a routine?
- benryves
- Maxcoderz Staff
- Posts: 3089
- Joined: Thu 16 Dec, 2004 10:06 pm
- Location: Croydon, England
- Contact:
Re: Nspire Compatibility
Text.4.PutMap is a variable that stores the address of the routine that is used to put characters on the screen and text buffer in VDU 4 mode (Text.4.PutMapNoWriteBuffer is the same but doesn't draw the underlying character to the text buffer at the same time, used for the flashing cursor). These variables contain Large.PutMap.Routine and Large.PutMapNoWriteBuffer.Routine when the large font is in use, Small.PutMap.Routine and Small.PutMapNoWriteBuffer.Routine when the small font is in use. (See Lib\VDU\Text\Modes.asm for example).
The graphical text routines are more flexible, as they don't need to draw the characters to a text buffer, just the screen. For this reason everything goes via Text.Graphical.PutMap.Routine, which performs the decisions to draw using the small or large font itself (bearing in mind you can change to the "wrong" font for the current mode with the *FONT command).
The graphical text routines are more flexible, as they don't need to draw the characters to a text buffer, just the screen. For this reason everything goes via Text.Graphical.PutMap.Routine, which performs the decisions to draw using the small or large font itself (bearing in mind you can change to the "wrong" font for the current mode with the *FONT command).