ORG &9000 ; 144 lines NOLIST ; Program 'PIC4ERAM.MAX' WRITE"PIC4ERAM.64K" ;Write Program to current Medium ;In this example a picture will be loaded from drive A ;The directory of drive A must have been read before! ; /Load a picture to Expansion RAM -> Wait for key -> Show picture -> key -> OS ;/ LOAD_2_ERAM LD A,(REG_PC+1) ;A = Medium of which the main program was loaded ld a,0 ;In this example the source medium is set to drive A ######### ;This line ^ needs to be deleted in your application ######### LD (MEDIUM),A ;Store Medium A..O (0-14) which contains the picture LD HL,EFER ;Search free 16 KB E-RAM block CALL ROM_A JR Z,END_P ;No free E-RAM left --> End Program LD (E_RAM),A ;Store newly found target E-RAM select LD (XR_ERM),HL ;Store pointer to XRAM_? variable. Enables to free E-RAM later LD HL,(E_RAM) ;Get previously found target E-RAM select LD (AKT_RAM),HL ;and prepare OS variable for 'Load Picture into E-RAM' LD DE,LBI ;Pointer to name of picture CALL LABIER ;Load the picture LD HL,WATA ;Wait for pressed key CALL ROM_C LD HL,S80X25 ;Set 80 columns and 25 lines CALL ROM_A LD BC,(E_RAM) ;Select E-RAM which contains picture and bank it in at &4000 OUT (C),C LD HL,&4000 ;Source address = Begin of E-RAM LD DE,&C000 ;Target address = Begin of V-RAM LD BC,&4000 ;Length = 16 KB LD IX,F_MOVE ;Quick Copy OS function in ROM C CALL ROM_A2C ;Copy 16 KB picture from &4000 to &C000 quicker than 'LDIR' LD BC,&7FC0 ;Bank in Main RAM OUT (C),C LD HL,WATA ;Wait for pressed key CALL ROM_C LD HL,(XR_ERM) ;Read pointer to E-RAM XRAM_? variable LD (HL),&01 ;Free 16 KB E-RAM of the temporary stored picture ;End program END_P LD IX,S64X32 ;Set 64 columns and 32 lines CALL ROM_D2A ;Calls 'S64x32' in ROM A, then banks ROM D in JP TUR_E ;-> Return to OS entry in ROM D ;Name of the picture to load ; LBI DB &00,"TEST-PICSCR" ;User-Nummer + Name + Extension ;Number of the source medium of the picture ; MEDIUM DB &00 ;Expansion RAM (E-RAM) Variables ; E_RAM DW &7FC6 ;Physical E-RAM I/O select of one 16 KB E-RAM block XR_ERM DW &0000 ;Pointer to one E-RAM XRAM_?? variable of one 16 KB E-RAM block ;Load Picture to &4000 in Expansion RAM (E-RAM)! ; ;Jump in ;------- ; DE = Pointer to User + Name + Extension of the Picture ;(MEDIUM) = Source-Medium of the Picture 0-14 (A-O) ; ;Jump back ;--------- ;A = &FF --> Picture was loaded just fine ;A <> &FF --> An error occured while loading the picture LABIER LD A,&03:LD (REG08_4),A ;Load to E-RAM LD HL,&4000:LD (REG16_3),HL ;Target Address is &4000 in E-RAM LD A,(MEDIUM) ;Source Medium LD IX,LADE_N:CALL ROM_A2C ;Load Picture INC A:JR NZ,LB_ERR ;A<>&FF --> Error while Loading! LD BC,&FA7E:LD A,(MO_ST):OUT (C),A ;Switch Drive Motors off LD BC,&7FC0:OUT (C),C ;Bank in Main RAM LD A,&FF:RET ;A = &FF --> Picture was loaded successfully ;Error while Loading LB_ERR LD BC,&FA7E:LD A,(MO_ST):OUT (C),A:LD BC,&7FC0:OUT (C),C:XOR A,A:RET ;EQUates AKT_RAM EQU &B84C ;RAM Variables REG_PC EQU &B8DA REG08_4 EQU &B8E0 REG16_3 EQU &B8EA MO_ST EQU &B97F ROM_A EQU &FF00 ;ROMs A-M ROM_C EQU &FF0C ROM_D EQU &FF12 ROM_A2C EQU &FF2A ROM_D2A EQU &FFBA S64X32 EQU &D5A8 ;ROM A S80X25 EQU &D60E EFER EQU &D9C1 F_MOVE EQU &C0C8 ;ROM C WATA EQU &FD38 LADE_N EQU &FD5C TUR_E EQU &FE9D ;ROM D LIST DUMP