📄 sdrv_putsdimage.s01
字号:
NAME sdrv_putsdimage(16)
RSEG BAC_PSDI(0)
RSEG BAD_PSDI(0)
EXTERN DisplayBuffer
EXTERN Hdrv_BuffDataTrans
EXTERN Hdrv_SetDrawMode
EXTERN Hdrv_SetWindow
EXTERN SD_Read
PUBLIC Sdrv_PutSDImage
PUBLIC sdrw
EXTERN ?CLZ80L_4_04_L00
EXTERN ?L_MUL_L03
EXTERN ?SL_MOD_L03
EXTERN ?L_ADDASG_L03
EXTERN ?L_SUBASG_L03
RSEG BAC_PSDI
Sdrv_PutSDImage:
; 1. /*
; 2. ********************************************************************************
; 3. * ACTOS
; 4. * ui dirver show picture
; 5. *
; 6. * (c) Copyright 2002-2003, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * File : UI_PutSDImage.msa
; 10. * By : Rcmai
; 11. * Version: 1> v1.00 first version 10/17/2003 10:46PM
; 12. ********************************************************************************
; 13. */
; 14. #include "display.h"
; 15. #include "Intrz80.h" //用到input8();
; 16. #include "Drv_S6B33B0A.h"
; 17.
; 18. //SD_RW sdrw;
; 19. //#pragma codeseg(UI_RCODE)
; 20.
; 21. #pragma memory=constseg(BAS_PSDI)
; 22. #pragma memory=default
; 23.
; 24. #pragma memory=dataseg(BAD_PSDI)
; 25. SD_RW sdrw;
; 26. //extern unsigned char BufPage;
; 27. #pragma memory=default
; 28.
; 29. #pragma codeseg(BAC_PSDI)
; 30.
; 31.
; 32. void Sdrv_PutSDImage(region_t *pic,long int imgddr)
; 33. {
PUSH BC
PUSH IY
PUSH IX
PUSH AF
PUSH AF
PUSH DE
POP IX
; 34. unsigned long cnt;
; 35. WORD cnt1;
; 36.
; 37.
; 38. //坐标出了屏幕,则退出
; 39. if(pic->x>Displaylength-1 || pic->y >Displayhight-1 )
LD A,(DE)
LD B,A
LD A,159
CP B
JP C,?0015
LD A,127
CP (IX+1)
JP C,?0015
?0002:
?0003:
?0000:
; 40. {
; 41. return;
; 42. }
?0001:
; 43.
; 44. //显示出屏幕的处理
; 45. if ((pic->height + pic->y) > Displayhight)
LD L,(IX+1)
LD B,0
LD D,B
LD E,(IX+3)
LD H,B
ADD HL,DE
LD C,L
LD B,H
LD HL,128
OR L
SBC HL,BC
JP PO,?0018
XOR H
?0018:
JP M,?0015
?0004:
; 46. {
; 47. return;
; 48. }
?0005:
; 49. if (pic->width > Displaylength-pic->x)
LD C,(IX+2)
LD B,D
LD E,(IX+0)
LD HL,160
AND A
SBC HL,DE
OR 128
SBC HL,BC
JP PO,?0019
XOR H
?0019:
JP M,?0015
?0006:
; 50. {
; 51. return;
; 52. }
?0007:
; 53.
; 54. Hdrv_SetDrawMode(DrawModeH_def);
LD E,B
CALL Hdrv_SetDrawMode
; 55.
; 56. Hdrv_SetWindow(pic); //设定要填入 的 图片的 行、列起始地址,就从这里开始填数据
PUSH IX
POP DE
CALL Hdrv_SetWindow
; 57.
; 58. cnt = (unsigned long)pic->width * (unsigned long)pic->height * 2;
LD L,(IX+2)
LD C,B
LD H,C
PUSH BC
PUSH HL
LD L,(IX+3)
LD H,C
CALL ?L_MUL_L03
ADD HL,HL
RL C
RL B
PUSH HL
LD HL,2
ADD HL,SP
POP DE
LD (HL),E
INC HL
LD (HL),D
INC HL
LD (HL),C
INC HL
LD (HL),B
; 59. cnt1 = 512 - (imgddr%512);//如不是页的开始,先读前面的不整页部分
LD HL,0
PUSH HL
LD H,2
PUSH HL
LD HL,16
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
CALL ?SL_MOD_L03
EX DE,HL
LD HL,512
AND A
SBC HL,DE
PUSH HL
POP IY
; 60.
; 61. sdrw.faddr=imgddr;
LD HL,12
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (sdrw),HL
LD (sdrw+2),BC
; 62. sdrw.srampage=input8(0x05)&0x0f;//(byte)BufPage; //FRAME BUFFER PAGE
IN A,(5)
AND 15
LD (sdrw+7),A
; 63. sdrw.sramaddr = (WORD)DisplayBuffer;
LD HL,DisplayBuffer
LD (sdrw+5),HL
; 64. if (cnt > (unsigned long)cnt1)
LD HL,0
ADD HL,SP
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
PUSH DE
PUSH BC
PUSH IY
POP HL
LD DE,0
AND A
POP BC
SBC HL,BC
EX DE,HL
POP BC
SBC HL,BC
JR NC,?0009
?0008:
; 65. {
; 66. SD_Read((int)&sdrw, cnt1);//把图片数据读出 放到 DisplayBuffer 中
PUSH IY
POP BC
LD DE,sdrw
CALL SD_Read
; 67. Hdrv_BuffDataTrans(DisplayBuffer, cnt1);//把显存中的数据搬到LCM中
PUSH IY
POP BC
LD DE,DisplayBuffer
CALL Hdrv_BuffDataTrans
; 68. cnt -= cnt1;
LD HL,0
ADD HL,SP
PUSH IY
POP DE
LD BC,0
CALL ?L_SUBASG_L03
; 69. sdrw.faddr += cnt1;
LD HL,sdrw
PUSH IY
POP DE
LD BC,0
CALL ?L_ADDASG_L03
?0009:
; 70. }
; 71. if (cnt == 0)
LD HL,0
ADD HL,SP
LD A,(HL)
INC HL
OR (HL)
INC HL
OR (HL)
INC HL
OR (HL)
JR Z,?0015
?0010:
; 72. {
; 73. return;
; 74. }
?0011:
?0013:
; 75.
; 76. while (cnt > (unsigned long)DisplayBufLen)// 一个显示暂存区的大小
LD HL,0
ADD HL,SP
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
PUSH DE
PUSH BC
AND A
LD HL,512
POP BC
SBC HL,BC
LD HL,0
POP BC
SBC HL,BC
JR NC,?0012
?0014:
; 77. {
; 78. SD_Read((int)&sdrw, DisplayBufLen);//把图片数据读出
LD BC,512
LD DE,sdrw
CALL SD_Read
; 79. Hdrv_BuffDataTrans(DisplayBuffer, DisplayBufLen);//把显存中的数据搬到LCM中
LD BC,512
LD DE,DisplayBuffer
CALL Hdrv_BuffDataTrans
; 80. cnt = cnt - (unsigned long)DisplayBufLen;
LD HL,0
ADD HL,SP
LD BC,65535
LD DE,65024
CALL ?L_ADDASG_L03
; 81. sdrw.faddr += DisplayBufLen;
LD HL,sdrw
LD BC,0
LD DE,512
CALL ?L_ADDASG_L03
; 82. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
JR ?0011
?0012:
; 83. }
; 84. sdrw.sramaddr = (WORD)DisplayBuffer;
LD HL,DisplayBuffer
LD (sdrw+5),HL
; 85. SD_Read((int)&sdrw, cnt);//把图片数据读出
LD HL,0
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
LD C,L
LD B,H
LD DE,sdrw
CALL SD_Read
; 86. Hdrv_BuffDataTrans(DisplayBuffer, cnt);//把显存中的数据搬到LCM中
LD HL,0
ADD HL,SP
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
PUSH DE
PUSH BC
LD DE,DisplayBuffer
CALL Hdrv_BuffDataTrans
POP AF
POP AF
; 87.
; 88. }
?0015:
POP HL
POP HL
POP IX
POP IY
POP BC
RET
; 89.
RSEG BAD_PSDI
sdrw:
DEFS 8
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -