You've already forked hackerlibultra
mirror of
https://github.com/HackerN64/hackerlibultra.git
synced 2026-01-21 10:37:53 -08:00
Matched Video Interface (vi) files and modes (#10)
This commit is contained in:
@@ -233,6 +233,21 @@ typedef struct {
|
||||
#define OS_VI_MPAL_HPN2 40
|
||||
#define OS_VI_MPAL_HPF2 41
|
||||
|
||||
#define OS_VI_FPAL_LPN1 42 /* FPAL - Full screen PAL */
|
||||
#define OS_VI_FPAL_LPF1 43
|
||||
#define OS_VI_FPAL_LAN1 44
|
||||
#define OS_VI_FPAL_LAF1 45
|
||||
#define OS_VI_FPAL_LPN2 46
|
||||
#define OS_VI_FPAL_LPF2 47
|
||||
#define OS_VI_FPAL_LAN2 48
|
||||
#define OS_VI_FPAL_LAF2 49
|
||||
#define OS_VI_FPAL_HPN1 50
|
||||
#define OS_VI_FPAL_HPF1 51
|
||||
#define OS_VI_FPAL_HAN1 52
|
||||
#define OS_VI_FPAL_HAF1 53
|
||||
#define OS_VI_FPAL_HPN2 54
|
||||
#define OS_VI_FPAL_HPF2 55
|
||||
|
||||
/*
|
||||
* Video Interface (VI) special features
|
||||
*/
|
||||
@@ -501,6 +516,21 @@ extern OSViMode osViModeMpalHaf1;
|
||||
extern OSViMode osViModeMpalHpn2;
|
||||
extern OSViMode osViModeMpalHpf2;
|
||||
|
||||
extern OSViMode osViModeFpalLpn1; /* Individual VI FPAL modes */
|
||||
extern OSViMode osViModeFpalLpf1;
|
||||
extern OSViMode osViModeFpalLan1;
|
||||
extern OSViMode osViModeFpalLaf1;
|
||||
extern OSViMode osViModeFpalLpn2;
|
||||
extern OSViMode osViModeFpalLpf2;
|
||||
extern OSViMode osViModeFpalLan2;
|
||||
extern OSViMode osViModeFpalLaf2;
|
||||
extern OSViMode osViModeFpalHpn1;
|
||||
extern OSViMode osViModeFpalHpf1;
|
||||
extern OSViMode osViModeFpalHan1;
|
||||
extern OSViMode osViModeFpalHaf1;
|
||||
extern OSViMode osViModeFpalHpn2;
|
||||
extern OSViMode osViModeFpalHpf2;
|
||||
|
||||
extern s32 osRomType; /* Bulk or cartridge ROM. 0=cartridge 1=bulk */
|
||||
extern void *osRomBase; /* Rom base address of the game image */
|
||||
extern s32 osTvType; /* 0 = PAL, 1 = NTSC, 2 = MPAL */
|
||||
|
||||
39
src/io/vi.c
Normal file
39
src/io/vi.c
Normal file
@@ -0,0 +1,39 @@
|
||||
#include <macros.h>
|
||||
#include <PR/os_internal.h>
|
||||
#include <PR/R4300.h>
|
||||
#include <PR/rcp.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
static __OSViContext vi[2] ALIGNED(8) = {0};
|
||||
__OSViContext *__osViCurr = &vi[0];
|
||||
__OSViContext *__osViNext = &vi[1];
|
||||
|
||||
void __osViInit(void) {
|
||||
bzero(vi, sizeof(vi));
|
||||
__osViCurr = &vi[0];
|
||||
__osViNext = &vi[1];
|
||||
__osViNext->retraceCount = 1;
|
||||
__osViCurr->retraceCount = 1;
|
||||
__osViNext->framep = (void*)K0BASE;
|
||||
__osViCurr->framep = (void*)K0BASE;
|
||||
|
||||
if (osTvType == OS_TV_TYPE_PAL) {
|
||||
__osViNext->modep = &osViModePalLan1;
|
||||
} else if (osTvType == OS_TV_TYPE_MPAL) {
|
||||
__osViNext->modep = &osViModeMpalLan1;
|
||||
} else {
|
||||
__osViNext->modep = &osViModeNtscLan1;
|
||||
}
|
||||
|
||||
__osViNext->state = VI_STATE_BLACK;
|
||||
__osViNext->control = __osViNext->modep->comRegs.ctrl;
|
||||
|
||||
while (IO_READ(VI_CURRENT_REG) > 10) { //wait for vsync?
|
||||
}
|
||||
|
||||
IO_WRITE(VI_CONTROL_REG, 0); //pixel size blank (no data, no sync)
|
||||
__osViSwapContext();
|
||||
}
|
||||
17
src/io/viblack.c
Normal file
17
src/io/viblack.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViBlack(u8 active) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if (active) {
|
||||
__osViNext->state |= VI_STATE_BLACK;
|
||||
} else {
|
||||
__osViNext->state &= ~VI_STATE_BLACK;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
18
src/io/vifade.c
Normal file
18
src/io/vifade.c
Normal file
@@ -0,0 +1,18 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViFade(u8 active, u16 factor) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if (active) {
|
||||
__osViNext->y.offset = factor & VI_2_10_FPART_MASK;
|
||||
__osViNext->state |= VI_STATE_FADE;
|
||||
} else {
|
||||
__osViNext->state &= ~VI_STATE_FADE;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
9
src/io/vigetcurrcontext.c
Normal file
9
src/io/vigetcurrcontext.c
Normal file
@@ -0,0 +1,9 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
__OSViContext *__osViGetCurrentContext(void) {
|
||||
return __osViCurr;
|
||||
}
|
||||
10
src/io/vigetcurrframebuf.c
Normal file
10
src/io/vigetcurrframebuf.c
Normal file
@@ -0,0 +1,10 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
void *osViGetCurrentFramebuffer(void) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
void *framep = __osViCurr->framep;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
return framep;
|
||||
}
|
||||
6
src/io/vigetfield.c
Normal file
6
src/io/vigetfield.c
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include <PR/rcp.h>
|
||||
|
||||
u32 osViGetCurrentField(void) {
|
||||
return IO_READ(VI_CURRENT_REG) & 1;
|
||||
}
|
||||
6
src/io/vigetline.c
Normal file
6
src/io/vigetline.c
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include <PR/rcp.h>
|
||||
|
||||
u32 osViGetCurrentLine(void) {
|
||||
return IO_READ(VI_CURRENT_REG);
|
||||
}
|
||||
10
src/io/vigetmode.c
Normal file
10
src/io/vigetmode.c
Normal file
@@ -0,0 +1,10 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
u32 osViGetCurrentMode(void) {
|
||||
register u32 savedMask = __osDisableInt();
|
||||
register u32 modeType = __osViCurr->modep->type;
|
||||
|
||||
__osRestoreInt(savedMask);
|
||||
return modeType;
|
||||
}
|
||||
6
src/io/vigetnextcontext.c
Normal file
6
src/io/vigetnextcontext.c
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
__OSViContext *__osViGetNextContext(void) {
|
||||
return __osViNext;
|
||||
}
|
||||
10
src/io/vigetnextframebuf.c
Normal file
10
src/io/vigetnextframebuf.c
Normal file
@@ -0,0 +1,10 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
void *osViGetNextFramebuffer(void) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
void *framep = __osViNext->framep;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
return framep;
|
||||
}
|
||||
6
src/io/vigetstat.c
Normal file
6
src/io/vigetstat.c
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include <PR/rcp.h>
|
||||
|
||||
u32 osViGetStatus(void) {
|
||||
return IO_READ(VI_STATUS_REG);
|
||||
}
|
||||
70
src/io/viint.h
Normal file
70
src/io/viint.h
Normal file
@@ -0,0 +1,70 @@
|
||||
#ifndef _VIINT_H
|
||||
#define _VIINT_H
|
||||
#include "PR/os_internal.h"
|
||||
|
||||
#define OS_TV_TYPE_PAL 0
|
||||
#define OS_TV_TYPE_NTSC 1
|
||||
#define OS_TV_TYPE_MPAL 2
|
||||
|
||||
#define VI_STATE_MODE_UPDATED 0x01
|
||||
#define VI_STATE_XSCALE_UPDATED 0x02
|
||||
#define VI_STATE_YSCALE_UPDATED 0x04
|
||||
#define VI_STATE_CTRL_UPDATED 0x08 // related to control regs changing
|
||||
#define VI_STATE_BUFFER_UPDATED 0x10 // swap buffer
|
||||
#define VI_STATE_BLACK 0x20 // probably related to a black screen
|
||||
#define VI_STATE_REPEATLINE 0x40 // repeat line?
|
||||
#define VI_STATE_FADE 0x80 // fade
|
||||
|
||||
#define VI_CTRL_ANTIALIAS_MODE_3 0x00300 /* Bit [9:8] anti-alias mode */
|
||||
#define VI_CTRL_ANTIALIAS_MODE_2 0x00200 /* Bit [9:8] anti-alias mode */
|
||||
#define VI_CTRL_ANTIALIAS_MODE_1 0x00100 /* Bit [9:8] anti-alias mode */
|
||||
|
||||
#define VI_SCALE_MASK 0xfff //see rcp scale_x/scale_y
|
||||
#define VI_2_10_FPART_MASK 0x3ff
|
||||
#define VI_SUBPIXEL_SH 0x10
|
||||
|
||||
#define BURST(hsync_width, color_width, vsync_width, color_start) \
|
||||
(hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20))
|
||||
#define WIDTH(v) v
|
||||
#define VSYNC(v) v
|
||||
#define HSYNC(duration, leap) (duration | (leap << 16))
|
||||
#define LEAP(upper, lower) ((upper << 16) | lower)
|
||||
#define START(start, end) ((start << 16) | end)
|
||||
|
||||
#define FTOFIX(val, i, f) ((u32)(val * (f32)(1 << f)) & ((1 << (i + f)) - 1))
|
||||
|
||||
#define F210(val) FTOFIX(val, 2, 10)
|
||||
#define SCALE(scaleup, off) (F210((1.0f / (f32)scaleup)) | (F210((f32)off) << 16))
|
||||
|
||||
#define VCURRENT(v) v //seemingly unused
|
||||
#define ORIGIN(v) v
|
||||
#define VINTR(v) v
|
||||
#define HSTART START
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* 0x0 */ f32 factor;
|
||||
/* 0x4 */ u16 offset;
|
||||
/* 0x8 */ u32 scale;
|
||||
} __OSViScale;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* 0x0 */ u16 state;
|
||||
/* 0x2 */ u16 retraceCount;
|
||||
/* 0x4 */ void *framep;
|
||||
/* 0x8 */ OSViMode *modep;
|
||||
/* 0xC */ u32 control;
|
||||
/* 0x10 */ OSMesgQueue *msgq;
|
||||
/* 0x14 */ OSMesg msg;
|
||||
/* 0x18 */ __OSViScale x;
|
||||
/* 0x24 */ __OSViScale y;
|
||||
} __OSViContext; // 0x30 bytes
|
||||
|
||||
void __osViSwapContext(void);
|
||||
extern __OSViContext *__osViCurr;
|
||||
extern __OSViContext *__osViNext;
|
||||
extern u32 __additional_scanline;
|
||||
__OSViContext *__osViGetCurrentContext(void);
|
||||
void __osViInit(void);
|
||||
#endif
|
||||
110
src/io/vimgr.c
Normal file
110
src/io/vimgr.c
Normal file
@@ -0,0 +1,110 @@
|
||||
#include <macros.h>
|
||||
#include <PR/os_internal.h>
|
||||
#include <PR/rcp.h>
|
||||
#include "viint.h"
|
||||
#include "../os/osint.h"
|
||||
|
||||
OSDevMgr __osViDevMgr = {0};
|
||||
u32 __additional_scanline = 0;
|
||||
static OSThread viThread;
|
||||
static unsigned char viThreadStack[OS_VIM_STACKSIZE] ALIGNED(16);
|
||||
static OSMesgQueue viEventQueue;
|
||||
static OSMesg viEventBuf[5] ALIGNED(8);
|
||||
static OSIoMesg viRetraceMsg ALIGNED(8);
|
||||
static OSIoMesg viCounterMsg ALIGNED(8);
|
||||
|
||||
static void viMgrMain(void *arg);
|
||||
void osCreateViManager(OSPri pri)
|
||||
{
|
||||
u32 savedMask;
|
||||
OSPri myPri;
|
||||
OSPri oldPri;
|
||||
|
||||
if (!__osViDevMgr.active) {
|
||||
__osTimerServicesInit();
|
||||
__additional_scanline = 0;
|
||||
osCreateMesgQueue(&viEventQueue, viEventBuf, ARRLEN(viEventBuf));
|
||||
viRetraceMsg.hdr.type = OS_MESG_TYPE_VRETRACE;
|
||||
viRetraceMsg.hdr.pri = OS_MESG_PRI_NORMAL;
|
||||
viRetraceMsg.hdr.retQueue = NULL;
|
||||
viCounterMsg.hdr.type = OS_MESG_TYPE_COUNTER;
|
||||
viCounterMsg.hdr.pri = OS_MESG_PRI_NORMAL;
|
||||
viCounterMsg.hdr.retQueue = NULL;
|
||||
osSetEventMesg(OS_EVENT_VI, &viEventQueue, &viRetraceMsg);
|
||||
osSetEventMesg(OS_EVENT_COUNTER, &viEventQueue, &viCounterMsg);
|
||||
oldPri = -1;
|
||||
myPri = osGetThreadPri(NULL);
|
||||
|
||||
if (myPri < pri) {
|
||||
oldPri = myPri;
|
||||
osSetThreadPri(NULL, pri);
|
||||
}
|
||||
|
||||
savedMask = __osDisableInt();
|
||||
__osViDevMgr.active = TRUE;
|
||||
__osViDevMgr.thread = &viThread;
|
||||
__osViDevMgr.cmdQueue = &viEventQueue;
|
||||
__osViDevMgr.evtQueue = &viEventQueue;
|
||||
__osViDevMgr.acsQueue = NULL;
|
||||
__osViDevMgr.dma = NULL;
|
||||
__osViDevMgr.edma = NULL;
|
||||
osCreateThread(&viThread, 0, viMgrMain, &__osViDevMgr, &viThreadStack[OS_VIM_STACKSIZE], pri);
|
||||
__osViInit();
|
||||
osStartThread(&viThread);
|
||||
__osRestoreInt(savedMask);
|
||||
|
||||
if (oldPri != -1) {
|
||||
osSetThreadPri(0, oldPri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void viMgrMain(void *arg) {
|
||||
__OSViContext *vc;
|
||||
OSDevMgr *dm;
|
||||
OSIoMesg *mb;
|
||||
static u16 retrace;
|
||||
s32 first;
|
||||
u32 count;
|
||||
|
||||
mb = NULL;
|
||||
first = 0;
|
||||
vc = __osViGetCurrentContext();
|
||||
retrace = vc->retraceCount;
|
||||
if (retrace == 0)
|
||||
retrace = 1;
|
||||
dm = (OSDevMgr *)arg;
|
||||
|
||||
while (TRUE) {
|
||||
osRecvMesg(dm->evtQueue, (OSMesg)&mb, OS_MESG_BLOCK);
|
||||
switch (mb->hdr.type) {
|
||||
case OS_MESG_TYPE_VRETRACE:
|
||||
__osViSwapContext();
|
||||
retrace--;
|
||||
|
||||
if (retrace == 0) {
|
||||
vc = __osViGetCurrentContext();
|
||||
if (vc->msgq != NULL)
|
||||
osSendMesg(vc->msgq, vc->msg, OS_MESG_NOBLOCK);
|
||||
retrace = vc->retraceCount;
|
||||
}
|
||||
|
||||
__osViIntrCount++;
|
||||
|
||||
if (first) {
|
||||
count = osGetCount();
|
||||
__osCurrentTime = count;
|
||||
first = 0;
|
||||
}
|
||||
|
||||
count = __osBaseCounter;
|
||||
__osBaseCounter = osGetCount();
|
||||
count = __osBaseCounter - count;
|
||||
__osCurrentTime = __osCurrentTime + count;
|
||||
break;
|
||||
case OS_MESG_TYPE_COUNTER:
|
||||
__osTimerInterrupt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
17
src/io/virepeatline.c
Normal file
17
src/io/virepeatline.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViRepeatLine(u8 active) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if (active) {
|
||||
__osViNext->state |= VI_STATE_REPEATLINE;
|
||||
} else {
|
||||
__osViNext->state &= ~VI_STATE_REPEATLINE;
|
||||
}
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
14
src/io/visetevent.c
Normal file
14
src/io/visetevent.c
Normal file
@@ -0,0 +1,14 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViSetEvent(OSMesgQueue *mq, OSMesg m, u32 retraceCount) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->msgq = mq;
|
||||
__osViNext->msg = m;
|
||||
__osViNext->retraceCount = retraceCount;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
14
src/io/visetmode.c
Normal file
14
src/io/visetmode.c
Normal file
@@ -0,0 +1,14 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViSetMode(OSViMode *modep) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->modep = modep;
|
||||
__osViNext->state = VI_STATE_01;
|
||||
__osViNext->control = __osViNext->modep->comRegs.ctrl;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
48
src/io/visetspecial.c
Normal file
48
src/io/visetspecial.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include <PR/rcp.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViSetSpecialFeatures(u32 func) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
if ((func & OS_VI_GAMMA_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_GAMMA_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_GAMMA_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_GAMMA_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_GAMMA_DITHER_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_GAMMA_DITHER_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_GAMMA_DITHER_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_GAMMA_DITHER_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DIVOT_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_DIVOT_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DIVOT_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_DIVOT_ON;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DITHER_FILTER_ON) != 0) {
|
||||
__osViNext->control |= VI_CTRL_DITHER_FILTER_ON;
|
||||
__osViNext->control &= ~VI_CTRL_ANTIALIAS_MASK;
|
||||
}
|
||||
|
||||
if ((func & OS_VI_DITHER_FILTER_OFF) != 0) {
|
||||
__osViNext->control &= ~VI_CTRL_DITHER_FILTER_ON;
|
||||
__osViNext->control |= __osViNext->modep->comRegs.ctrl & VI_CTRL_ANTIALIAS_MASK;
|
||||
}
|
||||
|
||||
__osViNext->state |= VI_STATE_08;
|
||||
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
16
src/io/visetxscale.c
Normal file
16
src/io/visetxscale.c
Normal file
@@ -0,0 +1,16 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViSetXScale(f32 value) {
|
||||
register u32 nomValue;
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->x.factor = value;
|
||||
__osViNext->state |= VI_STATE_XSCALE_UPDATED;
|
||||
nomValue = __osViNext->modep->comRegs.xScale & VI_SCALE_MASK;
|
||||
__osViNext->x.scale = (u32)(__osViNext->x.factor * nomValue) & VI_SCALE_MASK;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
13
src/io/visetyscale.c
Normal file
13
src/io/visetyscale.c
Normal file
@@ -0,0 +1,13 @@
|
||||
#include <PR/os_internal.h>
|
||||
#include "viint.h"
|
||||
|
||||
// TODO: this comes from a header
|
||||
#ident "$Revision: 1.17 $"
|
||||
|
||||
void osViSetYScale(f32 value) {
|
||||
register u32 saveMask = __osDisableInt();
|
||||
|
||||
__osViNext->y.factor = value;
|
||||
__osViNext->state |= VI_STATE_YSCALE_UPDATED;
|
||||
__osRestoreInt(saveMask);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user