[FC][常见Mapper IRQ研究]

本次IRQ研究了如下表所示Mapper的IRQ操作:

卡带名Mapper号
VRC373
VRC421,23,25
VRC624 & 26
VRC785
MMC34
MMC410
MMC55
Sunsoft FME-769
Namco16319
Jaleco SS 8800618
RAMBO-164

共计11种Mapper的IRQ操作使用例子
代码内有详细注释, 希望能帮助到感兴趣的人.

Mapper控制代码(MMC3为例)

[FC][Mapper][MMC3].asm

;==================================================
;Mapper号
MAPPER_NUMBER           = 04
;==================================================
;MMC3 (Mapper 4) 寄存器常量
MAPPER_REG_BANK_CTRL        =   $8000
MAPPER_REG_BANK_DATA        =   $8001
MAPPER_REG_MIRRORING        =   $A000
MAPPER_REG_PRG_RAM_PROTECT  =   $A001
MAPPER_REG_IRQ_LATCH        =   $C000
MAPPER_REG_IRQ_RELOAD       =   $C001
MAPPER_REG_IRQ_DISABLE      =   $E000
MAPPER_REG_IRQ_ENABLE       =   $E001
;==================================================
IRQ_SCANLINE_BEGIN          = 135
IRQ_SCANLINE_1              = 8
IRQ_SCANLINE_2              = 54
IRQ_SCANLINE_3              = 8
;==================================================;====================================================================================================
;宏常量
;====================================================================================================;====================================================================================================
MACRO_MAPPER_INIT .MACRO;禁用IRQSTA MAPPER_REG_IRQ_DISABLE;水平镜像LDA #$01STA MAPPER_REG_MIRRORING;初始化图形bankLDX #$05
.Init_Chr_BankSTX MAPPER_REG_BANK_CTRLLDA .ChrBankData,XSTA MAPPER_REG_BANK_DATADEXBPL .Init_Chr_BankJMP .Init_Chr_Bank_End
.ChrBankData.DB $00,$02,$04,$05,$06,$07
.Init_Chr_Bank_End;启用SRAMLDA #$80STA MAPPER_REG_PRG_RAM_PROTECT.ENDM;====================================================================================================
MACRO_MAPPER_SOUND_CLEAR .MACRO.ENDM;====================================================================================================
MACRO_SRAM_ENABLE .MACROLDA #$80STA MAPPER_REG_PRG_RAM_PROTECT.ENDM;====================================================================================================
MACRO_SWITCH_BANK_8000_A .MACROPHALDA #$06STA MAPPER_REG_BANK_CTRLPLASTA MAPPER_REG_BANK_DATA.ENDMMACRO_SWITCH_BANK_A000_A .MACROPHALDA #$07STA MAPPER_REG_BANK_CTRLPLASTA MAPPER_REG_BANK_DATA.ENDMMACRO_SWITCH_BANK_C000_A .MACRO.ENDMMACRO_SWITCH_BANK_E000_A .MACRO.ENDM;====================================================================================================
MACRO_TRIGGER_FIRST_IRQ .MACROLDA #IRQ_SCANLINE_BEGIN + 1STA MAPPER_REG_IRQ_LATCHSTA MAPPER_REG_IRQ_RELOADSTA MAPPER_REG_IRQ_ENABLECLI.ENDM;====================================================================================================
MACRO_ENABLE_IRQ  .MACROSTA MAPPER_REG_IRQ_ENABLE.ENDM;====================================================================================================
MACRO_DISABLE_IRQ  .MACROLDA #$00STA MAPPER_REG_IRQ_CTRLSTA MAPPER_REG_IRQ_ACK.ENDM;====================================================================================================
MACRO_ACK_IRQ .MACROSTA MAPPER_REG_IRQ_DISABLESTA MAPPER_REG_IRQ_ENABLE.ENDM;====================================================================================================
MACRO_IRQ_OPERATE   .MACRO;==================================================
;IRQ滚动模式常量
IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动;IRQ扫描线数据
IRQ_Scanline_Data.DB IRQ_SCANLINE_1.DB IRQ_SCANLINE_2.DB IRQ_SCANLINE_3.DW 00 ;关闭IRQ;IRQ滚动控制模式
IRQ_Scanline_Mode.DB IRQ_SCROLL_MODE_RIGHT.DB IRQ_SCROLL_MODE_LEFT.DB IRQ_SCROLL_MODE_RIGHT.DB IRQ_SCROLL_MODE_LEFT;==================================================
;;IRQ滚动控制
IRQ_Set_ScrollLDX IRQ_Process_IndexLDA IRQ_Scanline_Mode,XCMP #IRQ_SCROLL_MODE_LEFTBEQ IRQ_Set_Scroll_LeftCMP #IRQ_SCROLL_MODE_RIGHTBEQ IRQ_Set_Scroll_Right
IRQ_Set_Scroll_Zero;不滚动LDA #$00STA PPU_SCROLLSTA PPU_SCROLLRTS
IRQ_Set_Scroll_Left;向左滚动LDA Scroll_HSTA PPU_SCROLLSTA PPU_SCROLLRTS
IRQ_Set_Scroll_Right;向右滚动LDA #$00SECSBC Scroll_HSTA PPU_SCROLLSTA PPU_SCROLLRTS;==================================================
;;IRQ滚动控制
IRQ_Set_CtrlLDX IRQ_Process_IndexLDA IRQ_Scanline_Data,XBNE IRQ_Process_Latch
IRQ_Process_Disable;禁用IRQSTA MAPPER_REG_IRQ_DISABLESTA IRQ_Process_IndexRTS
IRQ_Process_Latch;设置下次 IRQ 触发扫描线STA MAPPER_REG_IRQ_LATCHINC IRQ_Process_IndexRTS;==================================================
;IRQ处理
IRQ_Process_By_IndexJSR IRQ_Set_ScrollJSR IRQ_Set_Ctrl
IRQ_Process_EndRTS.ENDM

公用配置

[FC][Mapper][Config].asm

;[FC][Mapper][IRQ]
;FlameCyclone 20231201.INCLUDE "[FC][Mapper][MMC3].asm";.INCLUDE "[FC][Mapper][MMC5].asm";.INCLUDE "[FC][Mapper][Namco163].asm";.INCLUDE "[FC][Mapper][VRC2&4].asm";.INCLUDE "[FC][Mapper][VRC3].asm";.INCLUDE "[FC][Mapper][VRC6].asm";.INCLUDE "[FC][Mapper][VRC7].asm";.INCLUDE "[FC][Mapper][FME7].asm";.INCLUDE "[FC][Mapper][Mapper18].asm";.INCLUDE "[FC][Mapper][Mapper64].asm";文件头配置
NES_16KB_PRG_SIZE           =   2
NES_8KB_CHR_SIZE            =   1
BANK_DATA_MASK              =   NES_16KB_PRG_SIZE * 2 - 1     ;bank号掩码
RESET_BANK                  =   NES_16KB_PRG_SIZE * 2 - 1
;======================================================================
PRG_DATA_BANK_C000          =   NES_16KB_PRG_SIZE * 2 - 2
PRG_DATA_BANK_E000          =   NES_16KB_PRG_SIZE * 2 - 1;文件头
;======================================================================.INESPRG NES_16KB_PRG_SIZE ;16KB PRG 数量.INESCHR NES_8KB_CHR_SIZE  ;8KB CHR 数量.INESMAP MAPPER_NUMBER.INESMIR 0     ;命名表镜像 0水平 1垂直;==================================================
;NES端口常量
PPU_CTRL                    =   $2000   ;PPU控制寄存器
PPU_MASK                    =   $2001   ;PPU掩码寄存器
PPU_STATUS                  =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
PPU_OAM_ADDR                =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
PPU_OAM_DATA                =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
PPU_SCROLL                  =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 
PPU_ADDRESS                 =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
PPU_DATA                    =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 
OAM_DMA                     =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
APU_STATUS                  =   $4015   ;声音通道切换
JOY1_FRAME                  =   $4016   ;手柄1 + 选通
JOY2_FRAME                  =   $4017   ;手柄2 + 选通;--------------------------------------------------
PROGRAM_BANK                =   PRG_DATA_BANK_E000
PROGRAM_ADDR                =   $E000;==================================================
;零页内存地址配置
Use_Ram_Begin               =   $80.RSSET Use_Ram_Begin
PPU_Ctrl_Buf                .RS 1
PPU_Msak_Buf                .RS 1
PPU_Scroll_H                .RS 1
PPU_Scroll_V                .RS 1
FC_Data_L                   .RS 1
FC_Data_H                   .RS 1
FC_Data_Buf                 .RS 1
FC_Data_Index               .RS 1;==================================================
GAMEPAD_MERGE_FLAG          =   $04Gamepad_Keep                .RS 2
Gamepad_Once                .RS 2
Gamepad_Temp                .RS 2   
Gamepad_0_State             .RS 1
Gamepad_1_State             .RS 1
Gamepad_0_Value             .RS 1
Gamepad_1_Value             .RS 1
Gamepad_Port_Value          .RS 1
Gamepad_Merge               .RS 1;==================================================
Scroll_H                    .RS 1
Scroll_V                    .RS 1
IRQ_Process_Index           .RS 1;==================================================
Prg_Bank_8000               .RS 1
Prg_Bank_A000               .RS 1
Prg_Bank_C000               .RS 1
Prg_Bank_E000               .RS 1
Prg_Bank_8000_Bak           .RS 1
Prg_Bank_A000_Bak           .RS 1
Prg_Bank_C000_Bak           .RS 1
Prg_Bank_E000_Bak           .RS 1;==================================================
Prg_Bank_A_Bak              .RS 1;==================================================

公用主程序代码

[FC][Mapper][IRQ].asm

 .INCLUDE "[FC][Mapper][Config].asm";CHR图形数据
;======================================================================.BANK NES_16KB_PRG_SIZE * 2.INCBIN "chr_bank/chr_data.chr".BANK PROGRAM_BANK & BANK_DATA_MASK.ORG PROGRAM_ADDR;--------------------------------------------------
Attributes_Data
;命名表属性.DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55.DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55.DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75.DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
;--------------------------------------------------
;调色板数据
Palette_Data.DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F.DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F;--------------------------------------------------
;命名表文本索引
Name_Table_Text_Index.DW .Name_Table_Text_Data_1.DW .Name_Table_Text_Data_2.DW .Name_Table_Text_Data_3.DW .Name_Table_Text_Data_4.DW .Name_Table_Text_Data_5.DW $00;结束标记.Name_Table_Text_Data_1.DB $20,$48.STR "MAPPER IRQ TEST".Name_Table_Text_Data_2.DB $22,$28.STR "SCROLL RIGHT".Name_Table_Text_Data_3.DB $22,$68.STR "SCROLL LEFT".Name_Table_Text_Data_4.DB $23,$26.STR "MADE BY FLAMECYCLONE".Name_Table_Text_Data_5.DB $23,$6B.STR "2023.12.01";==================================================
;命名表初始化
Init_Name_TableLDA #$20STA PPU_ADDRESSLDA #$00STA PPU_ADDRESSLDA #$00LDY #$00LDX #$10
Init_Name_Table_WriteSTA PPU_DATAINYBNE Init_Name_Table_WriteDEXBNE Init_Name_Table_WriteRTS;==================================================
;调色板初始化
Init_PaletteBIT PPU_STATUSLDA #$3FSTA PPU_ADDRESSLDA #$00STA PPU_ADDRESSLDX #$00
Init_Palette_WriteLDA Palette_Data,XSTA PPU_DATAINXCPX #$20BCC Init_Palette_WriteRTS;==================================================
;设置命名表属性
Init_NameTable_AttributesBIT PPU_STATUSLDA #$23STA PPU_ADDRESSLDA #$C0STA PPU_ADDRESSLDX #$00
Init_NameTable_Attributes_WriteLDA Attributes_Data,XSTA PPU_DATAINXCPX #$40BCC Init_NameTable_Attributes_WriteRTS;==================================================
;初始化命名表文本
Init_Name_Table_TextBIT PPU_STATUSBIT $FFFFLDA #$00STA <FC_Data_Index;检查需要写入的文本条目
.Write_Text_BeginLDA <FC_Data_IndexASL ATAYLDA Name_Table_Text_Index,YSTA <FC_Data_LINYLDA Name_Table_Text_Index,YSTA <FC_Data_H;没有文本索引则结束LDA <FC_Data_LORA <FC_Data_HBEQ .EndJSR .Write_Text_DataINC <FC_Data_IndexJMP .Write_Text_Begin.EndRTS;读取文本数据位置和长度
.Write_Text_DataLDY #$00LDA [FC_Data_L],YSTA PPU_ADDRESSINYLDA [FC_Data_L],YSTA PPU_ADDRESSINYLDA [FC_Data_L],YTAXINY
;写入PPU数据
.Write_PPU_DataLDA [FC_Data_L],YSTA PPU_DATAINYDEXBNE .Write_PPU_DataRTS;==============================
Init_OAM_Ram;初始化精灵内存LDX #$00LDA #$00STA PPU_OAM_ADDRLDA #$F8
Init_OAM_Ram_WriteSTA PPU_OAM_DATAINXBNE Init_OAM_Ram_WriteRTSGamepadProcess;手柄处理JSR GamepadDatacanLDA <Gamepad_0_ValueSTA <Gamepad_0_StateLDA <Gamepad_1_ValueSTA <Gamepad_1_StateJSR GamepadDatacanLDX #$01
GamepadMergeCheck;合并手柄输入检查LDA <Gamepad_0_Value,XCMP <Gamepad_0_State,XBEQ GamepadMergeInputLDA <Gamepad_Temp,XSTA <Gamepad_0_Value,X
GamepadMergeInput;合并手柄输入DEXBPL GamepadMergeCheckLDA <Gamepad_MergeAND #GAMEPAD_MERGE_FLAGBNE GamepadStateProcessLDA <Gamepad_0_ValueORA <Gamepad_1_ValueSTA <Gamepad_0_Value
GamepadStateProcess;手柄状态处理LDX #$01
GamepadStateSave;手柄状态保存LDA <Gamepad_0_Value,XTAYEOR <Gamepad_Temp,XAND <Gamepad_0_Value,XSTA <Gamepad_Once,XSTY <Gamepad_Keep,XSTY <Gamepad_Temp,XDEXBPL GamepadStateSaveRTSGamepadDatacan;手柄数据扫描LDX #$01STX $4016DEXSTX $4016LDY #$08
GamepadPortScan;手柄端口扫描LDA $4016STA <Gamepad_Port_ValueLSR AORA <Gamepad_Port_ValueLSR AROL <Gamepad_0_ValueLDA $4017STA <Gamepad_Port_ValueLSR AORA <Gamepad_Port_ValueLSR AROL <Gamepad_1_ValueDEYBNE GamepadPortScanRTS;==================================================
;PPU处理, 这里仅重置PPU滚动
PPU_ProcessLDA #$00STA PPU_MASKBIT PPU_STATUSLDA #$20STA PPU_ADDRESSLDA #$00STA PPU_ADDRESSSTA PPU_SCROLLSTA PPU_SCROLLLDA PPU_Msak_BufSTA PPU_MASKRTS;==============================
Time_For_Vblank;延时等待LDA PPU_STATUSBPL Time_For_VblankRTS;==================================================
;重置中断处理
ResetProgramSEICLDLDA #$00STA PPU_CTRLSTA PPU_MASKSTA PPU_STATUSSTA JOY2_FRAMESTA APU_STATUSLDA #$C0STA JOY2_FRAME;等待vblankLDX #$02
Vblank_Wait_1BIT PPU_STATUSBPL Vblank_Wait_1
Vblank_Wait_2BIT PPU_STATUSBMI Vblank_Wait_2DEXBNE Vblank_Wait_1LDX #$FFTXS;初始化MapperMACRO_MAPPER_INIT;==============================
;RAM初始化
Nes_Ram_InitLDY #$00LDX #$08LDA #$00STA <$00STA <$01
Nes_Ram_Init_WriteSTA [$00],YINYBNE Nes_Ram_Init_WriteINC <$01DEXBNE Nes_Ram_Init_Write;初始化命名表JSR Init_Name_Table;初始化调色板JSR Init_Palette;初始化命名表属性JSR Init_NameTable_Attributes;初始化精灵内存JSR Init_OAM_Ram;在屏幕上写点东西JSR Init_Name_Table_TextJSR Time_For_Vblank;开启PPU控制LDA #$A8STA PPU_Ctrl_BufSTA PPU_CTRL;开启PPU显示LDA #$1ESTA PPU_Msak_BufCLIJMP Loop;==============================
;死循环, 等待NMI中断
LoopJMP Loop;IRQ宏代码定义MACRO_IRQ_OPERATE;==================================================
;NMI中断处理
NmiProgramPHATXAPHATYAPHA;读取清除Vblank标志, 防止重复进入BIT PPU_STATUS;水平滚动值增加INC Scroll_H;启动IRQMACRO_TRIGGER_FIRST_IRQ;重置IRQ索引LDA #$00STA <IRQ_Process_Index;关闭PPU控制LDA #$00STA PPU_CTRL;处理PPUJSR PPU_Process;开启PPU控制LDA PPU_Ctrl_BufSTA PPU_CTRL;手柄处理JSR GamepadProcessPLATAYPLATAXPLARTI;==================================================
;IRQ中断处理
IrqProgramPHATXAPHATYAPHA;IRQ确认MACRO_ACK_IRQ;IRQ处理JSR IRQ_Process_By_IndexIrqProgramEndPLATAYPLATAXPLARTI;==================================================
;中断表.ORG $FFFA.WORD NmiProgram.WORD ResetProgram.WORD IrqProgram

gitee代码库:

FlameCyclone/FC IRQ (gitee.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib学习

显示两个figure 坐标上刻度修改 plt.xlim() 下标范围 plt.xticks() 替换新的下标 图例显示 散点图 subplot多合一显示

docker部署frp穿透内网

文章目录 &#xff08;1&#xff09;部署frps服务器&#xff08;2&#xff09;部署frpc客户端&#xff08;3&#xff09;重启与访问frp&#xff08;4&#xff09;配置nginx反向代理 &#xff08;1&#xff09;部署frps服务器 docker安装参考文档&#xff1a;docker基本知识 1…

Tmux奇技淫巧

Tmux奇技淫巧 在日常的开发工作中&#xff0c;终端是我们最常用的工具之一。在终端中我们可以调用各种解释器&#xff0c;来执行命令&#xff0c;完成我们的工作。然而&#xff0c;对于只使用终端的默认功能的开发者来说&#xff0c;他们可能会错过一些强大的工具和技巧&#…

【SLAM十四讲-9.3 实践Ceres BA-BAL数据集problem-16-22106-pre.txt分析】

数据集Dubrovnik Dataset 杜布罗夫尼克数据集的链接&#xff1a;Bundle Adjustment in the Large https://grail.cs.washington.edu/projects/bal/ problem-16-22106-pre.txt.bz216 22106 83718&#xff08;这里是第1行&#xff09; 0 0 -3.859900e02 3.871200e02&#x…

Gson的用法详解

一、简介 Gson&#xff08;又称Google Gson&#xff09;是Google公司发布的一个开放源代码的Java库&#xff0c;主要用途为序列化Java对象为JSON字符串&#xff0c;或反序列化JSON字符串成Java对象。 Gson官网&#xff1a;gson Gson源码地址&#xff1a;google/gson 二、依赖…

STM32F407-14.3.8-01强制输出模式

强制输出模式 在输出模式&#xff08;TIMx_CCMRx 寄存器中的 CCxS② 位 00&#xff09;下&#xff0c;可直接由软件将每个输出比较信号&#xff08;OCxREF④ 和 OCx⑥/OCxN⑦&#xff09;强制设置为有效电平或无效电平&#xff0c;而无需考虑输出比较寄存器和计数器之间的任何…

CMake构建工具

文章目录 CMake构建工具1.概念2.mk文件3.CmakeList4.预编译 CMake构建工具 1.概念 Android构建原始库的工具&#xff0c;对mk构建工具封装&#xff0c;还是makefile。 加载lib库 2.mk文件 //call调用test-dir这个方法&#xff0c;返回mk文件的路径&#xff0c;LOCAL_PATH这…

一文搞懂设计模式之责任链模式

大家好&#xff0c;我是晴天。我们又见面了&#xff0c;本周我们继续学习设计模式&#xff0c;本周将同大家一起学习责任链模式。 场景引入 我们回想一下自己曾经经历过的考学场景&#xff0c;我们是如何一步一步考上大学的&#xff08;为了简化过程只提取核心环节&#xff09…

如何使用vue组件

目录 1&#xff1a;组件之间的父子关系 2&#xff1a;使用组件的三个步骤 3&#xff1a;components组件的是私有子组件 4&#xff1a;在main.js文件中使用Vue.component全局注册组件 1&#xff1a;组件之间的父子关系 一&#xff1a;首先封装好的组件是不存在任何的关系的…

强化学习简明教程

到目前为止&#xff0c;我们主要关注监督学习问题&#xff08;主要是分类&#xff09;。 在监督学习中&#xff0c;我们得到某种由输入/输出对组成的训练数据&#xff0c;目标是能够在学习模型后根据一些新输入来预测输出。 例如&#xff0c;我们之前研究过 MNIST 的卷积神经网…

阅读笔记|A Survey of Large Language Models

阅读笔记 模型选择&#xff1a;是否一定要选择参数量巨大的模型&#xff1f;如果需要更好的泛化能力&#xff0c;用于处理非单一的任务&#xff0c;例如对话&#xff0c;则可用选更大的模型&#xff1b;而对于单一明确的任务&#xff0c;则不一定越大越好&#xff0c;参数小一…

BearPi Std 板从入门到放弃 - 1 引气入体篇

安装相关开发工具 Keil MDK 工具下载 略, 自行体会 Keil 芯片支持包下载 Keil 包 网址 https://www.keil.com/pack 此处下载的是STM32L4xx的支持包 https://www.keil.com/pack/Keil.STM32L4xx_DFP.2.6.2.pack STM32CubeMX 下载与包下载 i. 下载&#xff08;需要使用用户&…

DouyinAPI接口系列丨Douyin商品详情数据接口丨Douyin视频详情数据接口

抖音商品详情API是抖音开放平台提供的一套API接口&#xff0c;用于获取商品详情信息。通过该API&#xff0c;开发者可以获取到商品的详细信息&#xff0c;包括商品ID、名称、描述、价格、销量、评价等信息。 在使用抖音商品详情API之前&#xff0c;需要先注册并登录抖音开放平…

fl studio21.2最新汉化中文完整版网盘下载

fl studio 21中文版是Image-Line公司继20版本之后更新的水果音乐制作软件&#xff0c;很多用户不太理解&#xff0c;为什么新版本不叫fl studio 21或fl studio2024&#xff0c;非得直接跳到21.2版本&#xff0c;其实该版本是为了纪念该公司22周年&#xff0c;所以该版本也是推出…

系统监控:使用日志文件 journalctl的使用

journalctl 显示最近登录的&#xff1a; 上面有最近登录的时间&#xff0c;和系统操作 几十年来&#xff0c;Linux日志记录一直由syslogd守护进程管理。Syslogd将收集系统处理和应用程序发送到/dev/log伪设备的日志消息。然后&#xff0c;它会将消息定向到/var/log/目录中适当…

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗&#xff1f;MacDroid Pro for Mac 是您的最佳选择&#xff01;这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面&#xff0c;让您能够直接在Mac上…

人工智能和网络安全:坏与好

人工智能似乎可以并且已经被用来帮助网络犯罪和网络攻击的各个方面。 人工智能可以用来令人信服地模仿真人的声音。人工智能工具可以帮助诈骗者制作更好、语法正确的网络钓鱼消息&#xff08;而糟糕的语法往往会暴露出漏洞&#xff09;&#xff0c;并将其翻译成多种语言&…

字符函数 和 字符串函数

今天我打算介绍一些字符函数和字符串函数&#xff0c;有一些字符串函数我实现了模拟&#xff0c;但文章中没有放出来&#xff0c;如果需要的欢迎来到我的gitee里面拿取&#xff08;在test.c11-23里面&#xff09; 这是我的gitee:小汐 (lhysxx) - Gitee.com 字符函数 1. islow…

matlab操作方法(一)——向量及其操作

1.向量及其操作 matlab是英文Matrix Laboratory&#xff08;矩阵实验室&#xff09;的简称&#xff0c;是基于矩阵运算的操作环境。matlab中的所有数据都是以矩阵或多维数组的形式存储的。向量和标量是矩阵的两种特殊形式 向量是指单行或者单列的矩阵&#xff0c;它是构成矩阵…

C语言易错知识点八(结构体)

结构体 世间万物&#xff0c;上至飞禽&#xff0c;下至走兽&#xff0c;全都知道一件事&#xff1a;三个臭皮匠&#xff0c;顶个诸葛亮。&#xff08;假的&#xff09;即使是处于人类前沿的编程语言也知道要把数据联合在一起&#xff0c;于是便有了数组&#xff0c;结构体&…