.module Graphical .module Cursor Up.Routine push hl push de push bc ld a,(Vdu.Text.Graphical.CharHeight) ld e,a ld a,(Graphics.Scale.Y) .fcall "Maths.Mul.U8U8" ld a,(Graphics.FlipY8) cp $C9 jr nz,+ ld a,h \ cpl \ ld h,a ld a,l \ cpl \ ld l,a inc hl + ld de,(Graphics.VisitedPoint0.Y) add hl,de push hl .fcall "Graphics.ScaleY.HL" .fcall "Graphics.FlipY16" ld de,(Graphics.Bounds.MinY) ld d,$80 ld a,h xor $80 ld h,a or a sbc hl,de pop de jr nc,CanMoveUp call MoveToBottom.Routine jr MovedUp CanMoveUp ld hl,(Graphics.VisitedPoint0.X) .fcall "Graphics.VisitPointAbsolute" MovedUp pop bc pop de pop hl ret Left.Routine push hl push de push bc ld a,(Vdu.Text.Graphical.CharWidth) ld e,a ld a,(Graphics.Scale.X) .fcall "Maths.Mul.U8U8" ld de,(Graphics.VisitedPoint0.X) ex de,hl or a sbc hl,de ; Have we gone past the left? push hl .fcall "Graphics.ScaleX.HL" ld de,(Graphics.Bounds.MinX) ld d,$80 ld a,h xor $80 ld h,a or a sbc hl,de pop hl jr nc,CanMoveLeft call MoveToRight.Routine call Up.Routine jr MovedLeft CanMoveLeft ld de,(Graphics.VisitedPoint0.Y) .fcall "Graphics.VisitPointAbsolute" MovedLeft pop bc pop de pop hl ret Down.Routine push hl push de push bc ld a,(Vdu.Text.Graphical.CharHeight) ld e,a ld a,(Graphics.Scale.Y) .fcall "Maths.Mul.U8U8" ld a,(Graphics.FlipY8) cp $C9 jr z,+ ld a,h \ cpl \ ld h,a ld a,l \ cpl \ ld l,a inc hl + ld de,(Graphics.VisitedPoint0.Y) add hl,de ; Have we gone past the bottom? push hl .fcall "Graphics.ScaleY.HL" .fcall "Graphics.FlipY16" ld de,(Graphics.Bounds.MaxY) ld d,$80 ld a,h xor $80 ld h,a or a ex de,hl sbc hl,de pop de jr nc,CanMoveDown call MoveToTop.Routine jr MovedDown CanMoveDown ld hl,(Graphics.VisitedPoint0.X) .fcall "Graphics.VisitPointAbsolute" MovedDown pop bc pop de pop hl ret Right.Routine push hl push de push bc ld a,(Vdu.Text.Graphical.CharWidth) ld e,a ld a,(Graphics.Scale.X) .fcall "Maths.Mul.U8U8" ld de,(Graphics.VisitedPoint0.X) add hl,de ; Have we gone past the right? push hl .fcall "Graphics.ScaleX.HL" ld de,(Graphics.Bounds.MaxX) ld d,$80 ld a,h xor $80 ld h,a or a ex de,hl sbc hl,de pop hl jr nc,CanMoveRight call MoveToLeft.Routine call Down.Routine jr MovedRight CanMoveRight ld de,(Graphics.VisitedPoint0.Y) .fcall "Graphics.VisitPointAbsolute" MovedRight pop bc pop de pop hl ret PutBlinking.Routine ret MoveToLeft.Routine push hl push de ld a,(Graphics.Bounds.MinX) ld e,a ld a,(Graphics.Scale.X) .fcall "Maths.Mul.U8U8" ld de,(Graphics.VisitedPoint0.Y) .fcall "Graphics.VisitPointAbsolute" pop de pop hl ret MoveToRight.Routine push hl push de ld a,(Vdu.Text.Graphical.CharWidth) ld e,a ld a,(Graphics.Bounds.MaxX) sub e inc a ld e,a ld a,(Graphics.Scale.X) .fcall "Maths.Mul.U8U8" ld de,(Graphics.VisitedPoint0.Y) .fcall "Graphics.VisitPointAbsolute" pop de pop hl ret MoveToTop.Routine push hl push de ld a,(Graphics.FlipY8) cp $C9 ld a,(Graphics.Bounds.MinY) jr z,+ ld e,a ld a,63 sub e + ld e,a ld a,(Graphics.Scale.Y) .fcall "Maths.Mul.U8U8" ex de,hl ld hl,(Graphics.VisitedPoint0.X) .fcall "Graphics.VisitPointAbsolute" pop de pop hl ret MoveToBottom.Routine push hl push de ld a,(Graphics.FlipY8) cp $C9 ld a,(Graphics.Bounds.MaxY) jr z,BottomYAxisNotFlipped neg add a,63-1 ld e,a ld a,(Vdu.Text.CharHeight) add a,e jr FoundBottom BottomYAxisNotFlipped ld e,a ld a,(Vdu.Text.CharHeight) neg add a,e inc a FoundBottom ld e,a ld a,(Graphics.Scale.Y) .fcall "Maths.Mul.U8U8" ex de,hl ld hl,(Graphics.VisitedPoint0.X) .fcall "Graphics.VisitPointAbsolute" pop de pop hl ret .endmodule LoadSprite ld l,a ld h,0 ld a,(Vdu.Text.Graphical.CharWidth) cp 8 jr z,PutMap.8 PutMap.4 add hl,hl ld d,h ld e,l add hl,hl add hl,de ld de,Resources.Font add hl,de ld de,Vdu.Text.SpriteFontCharacter ld (Graphics.Sprite.SpriteData),de ld b,6 - ld a,(hl) and $F0 ld (de),a inc hl inc de djnz - xor a ld (de),a inc de ld (de),a jr PutMap.LoadedSprite PutMap.8 add hl,hl add hl,hl add hl,hl ld de,(Vdu.Text.UserDefinableFont) add hl,de ld de,Vdu.Text.SpriteFontCharacter ld (Graphics.Sprite.SpriteData),de ld bc,8 ldir PutMap.LoadedSprite ret PutMap.Routine push ix push hl push de push bc call LoadSprite ld a,1 ld (Graphics.PlotShape),a ld a,(Graphics.ForegroundColour) ld (Graphics.CurrentColour),a .fcall "Graphics.PlotDrawSprite" call Modes.Lcd.CopyConditional pop bc pop de pop hl pop ix ret PutMap.Delete push ix push hl push de push bc ld a,127 call LoadSprite ld a,3 ld (Graphics.PlotShape),a ld a,(Graphics.BackgroundColour) ld (Graphics.CurrentColour),a .fcall "Graphics.PlotDrawSprite" call Modes.Lcd.CopyConditional pop bc pop de pop hl pop ix ret .endmodule