;license:MIT ;(c) 2018-9 by 4am ; ; Super hi-res slideshows ; ; Public functions ; - SHRSlideshow ; - SHRSingle ; SHRSlideshow lda MachineStatus ; only show SHR on IIgs or if we have a VidHD card and #SUPPORTS_SHR bne + SHRRTS rts + jsr LoadSHRTransition jsr okvs_iter !word gSlideshowStore !word SHRArtworkCallback jmp BlankHGR SHRSingle +STAY + lda MachineStatus ; only show SHR on IIgs or if we have a VidHD card and #SUPPORTS_SHR beq SHRRTS jsr BlankSHR jsr LoadFile !word kRootDirectory + !word $FDFD ; SMC !word $2000 jsr LoadSHRTransition +LDADDR $A000 jsr ExecuteTransitionAndWait jmp BlankHGR ;------------------------------------------------------------------------------ ; LoadSHGRTransition [private] ; ; in: none ; out: all registers and flags clobbered ; $A000..$BFFF/main contains transition effect code ;------------------------------------------------------------------------------ LoadSHRTransition jsr LoadFile !word kFXDirectory !word kSFXFizzleFile !word $A000 rts ;------------------------------------------------------------------------------ ; .SHRArtworkCallback [private] ; callback called by okvs_iter on gSlideshowStore ; to load and display a single SHR graphic ; in: A/Y contains address of filename (name only, path is always /ARTWORK.SHR/) ; X contains 0-based index of the current record in gSlideshowStore ; out: all registers and flags clobbered ; $0800..$1EFF preserved (this contains the gSlideshowStore OKVS data) ; $2000..$BFFF clobbered by graphics data and transition code ; $2000..$5FFF/aux clobbered ;------------------------------------------------------------------------------ SHRArtworkCallback bit KBD bmi SHRRTS +STAY @sfname jsr GetGameInfo ; if game is not found (C will be set here), it means it can't be played on ; this machine due to memory or joystick requirements, so we don't display ; it in slideshows bcs SHRRTS stx gGameToLaunch jsr BlankSHR ; load SHR artwork at $2000/main (not aux) jsr LoadFile !word kSHRArtworkDirectory @sfname !word $FDFD !word $2000 +LDADDR $A000 jmp ExecuteTransitionAndWait ;------------------------------------------------------------------------------ ; .BlankSHR [private] ; clear and show SHR mode without flickering ; ; in: Machine is a IIgs or has a VidHD card that responds appropriately to ; IIgs-specific softswitches for graphics and memory modes. ; NOTE: THIS ROUTINE WILL CRASH ON AN APPLE //C due to writing to $C029, ; so it is imperative that the caller ensures the machine type. ; Thanks to John Brooks for explaining all of this to me. Twice. ; out: text page clobbered (but screen holes preserved) ; $2000..$9FFF/aux cleared ;------------------------------------------------------------------------------ BlankSHR jsr Home lda NEWVIDEO ; set GS NEWVIDEO mode to turn on linearize ora #$40 sta NEWVIDEO sta WRITEAUXMEM ; writes go to auxmem lda SHADOW ; enable auxmem-to-bank-E1 shadowing on IIgs and #$F7 sta SHADOW lda #$20 ; clear $2000..$9FFF in auxmem ldx #$80 jsr ClearMem sta WRITEMAINMEM ; writes go to main memory lda NEWVIDEO ; set GS NEWVIDEO mode to turn on SHR mode ora #$81 sta NEWVIDEO rts